在Laravel 5中我应该使用依赖注入或绑定?

时间:2019-04-02 11:40:28

标签: 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);
   }
}

我不知道哪种方法更好?我应该优先考虑什么?

1 个答案:

答案 0 :(得分:0)

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

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