我有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);
}
}
我不知道哪种方法更好?我应该优先考虑什么?
答案 0 :(得分:0)
对于$this->app->singleton
,这将仅创建存储库的一个实例,并在您执行app('user-repository')
的其他地方使用它,而不是创建新的对象。如果您对存储库没有某些复杂的依赖关系,那么我将在控制器中坚持使用__construct(UserRepository $repository)
。这用于自动解决任何依赖关系,这些依赖关系对于Laravel来说很简单,例如类名,而不是接口。由于您的存储库不依赖其他任何内容,因此您也可以
(new UserRepository())->getUsersByCompany($company);