Laravel 4 上的依赖注入
Dependency Injection on Laravel 4
当我们需要访问存储库中的另一个 class 时,以下技术可以正常工作。
即。
命名空间应用;
class AbcRepo 实现 AbcInterface {
}
namespace App;
class DefRepo implements DefInterface {
protected $abc;
public function __construct(AbcInterface $abc) {
$this->abc = $abc;
}
}
因此,当我在服务提供商中注册时:
$app->bind('App\DefInterface', function($app) {
return new App\DefRepo(App::make('App\AbcInterface'));
});
困扰我的问题是:
new App\DefRepo(App::make('App\AbcInterface'));
这是正确的做法吗?我们(我的意思是我)从不对服务提供进行单元测试,所以我可以简单地忽略它,因为它有效。但任何输入将不胜感激。
这是正确的,但是最好让类型提示依赖注入初始化 RefRepo
。
$app->bind('App\DefInterface', 'App\DefRepo');
$app->bind('App\AbcInterface', 'App\AbcRepo');
这意味着 Laravel 将在需要实现 DefInterface
的 class 时尝试初始化 DefRepo
。因为 DefRepo
需要 AbcInterface
,所以 class AbcRepo
将被注入到实例中。
当我们需要访问存储库中的另一个 class 时,以下技术可以正常工作。
即。 命名空间应用; class AbcRepo 实现 AbcInterface {
}
namespace App;
class DefRepo implements DefInterface {
protected $abc;
public function __construct(AbcInterface $abc) {
$this->abc = $abc;
}
}
因此,当我在服务提供商中注册时:
$app->bind('App\DefInterface', function($app) {
return new App\DefRepo(App::make('App\AbcInterface'));
});
困扰我的问题是:
new App\DefRepo(App::make('App\AbcInterface'));
这是正确的做法吗?我们(我的意思是我)从不对服务提供进行单元测试,所以我可以简单地忽略它,因为它有效。但任何输入将不胜感激。
这是正确的,但是最好让类型提示依赖注入初始化 RefRepo
。
$app->bind('App\DefInterface', 'App\DefRepo');
$app->bind('App\AbcInterface', 'App\AbcRepo');
这意味着 Laravel 将在需要实现 DefInterface
的 class 时尝试初始化 DefRepo
。因为 DefRepo
需要 AbcInterface
,所以 class AbcRepo
将被注入到实例中。