首页 > 解决方案 > 我应该在 Laravel 5 中使用什么依赖注入或绑定?

问题描述

我有类 UserRepository

class UserRepository
{
    public function getUsersByCompany(Company $company)
    {
    }
}

为了在控制器中使用这个类,我使用依赖注入

class UserController extends Controller {

    public function __construct(UserRepository $repository)
    {
        $this->repository = $repository;
    }

    public function index(Company $company)
    {
        retrurn $this->repository->getUsersByCompany($company);
    }
}

另外,我可以使用绑定

class AppServiceProvider extends ServiceProvider
{
   /**
    * Bootstrap any application services.
    *
    * @return void
    */
   public function boot()
   {
   }
   public function register()
   {
         $this->app->singleton('user-repository', function ($app) {
               return $this->app->make(UserRepository::class);
         });
   }
}
class UserController extends Controller {

   public function index(Company $company)
   {
       retrurn app('user-repository')->getUsersByCompany($company);
   }
}

我不明白哪种方式更好?我应该优先考虑什么?

标签: laravel-5

解决方案


在这种情况下,$this->app->singleton将仅创建存储库的一个实例,并在您做的其他地方使用它,app('user-repository')而不是创建一个新对象。如果您对存储库没有一些复杂的依赖关系,我会坚持__construct(UserRepository $repository)使用控制器。这用于自动解决任何对 Laravel 来说足够简单的依赖关系,例如类名,而不是接口。由于您的存储库不依赖于您也可以做的任何其他事情

(new UserRepository())->getUsersByCompany($company);

推荐阅读