laravel-5 - 我应该在 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);
}
}
我不明白哪种方式更好?我应该优先考虑什么?
解决方案
在这种情况下,$this->app->singleton
将仅创建存储库的一个实例,并在您做的其他地方使用它,app('user-repository')
而不是创建一个新对象。如果您对存储库没有一些复杂的依赖关系,我会坚持__construct(UserRepository $repository)
使用控制器。这用于自动解决任何对 Laravel 来说足够简单的依赖关系,例如类名,而不是接口。由于您的存储库不依赖于您也可以做的任何其他事情
(new UserRepository())->getUsersByCompany($company);
推荐阅读
- excel - IF Then 语句中的 VBA 数组公式和目标搜索
- javascript - TypeError:在未实现接口位置的对象上调用了“分配”
- yii2 - Yii2 唯一验证者加入错误
- nginx - 如何在 IBM bluemix Cloud Foundry 上设置 nginx.conf 以进行单页应用程序路由以及如何设置 url 重写以支持 spa 路由?
- javascript - 如何使用 Django 显示日志
- node.js - NodeJS Socket.io - 发送有效,接收无效
- java - 如果在 Spring Boot 中同时出现多个请求,如何保持?
- blueprism - 无法在蓝色棱镜中加载 OTAClient.dll
- c# - 在 LINQ 中搜索列表时性能缓慢
- dart - Flutter-点击照片后如何将相机保持在屏幕上?