当我们需要访问存储库中的另一个类时,以下技术可以按预期工作。
即。 命名空间App; 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'));
这是正确的方法吗?我们(我的意思是)从不对服务提供进行单元测试,因此我可以忽略它,因为这有效。但任何意见都会受到赞赏。
答案 0 :(得分:1)
这是正确的,但最好让typehinted依赖注入初始化RefRepo
。
$app->bind('App\DefInterface', 'App\DefRepo');
$app->bind('App\AbcInterface', 'App\AbcRepo');
这意味着当需要实现DefRepo
的类时,Laravel将尝试初始化DefInterface
。由于DefRepo
需要AbcInterface
,因此类AbcRepo
将被注入实例。