我有一个EmailProvider我通过我的构造函数注入。在运行时,它需要用主机、端口等初始化。这些设置可以根据不同的用户输入而改变。初始化注入依赖的最佳实践方法是什么?
我应该注入一个抽象接口与创建方法?这个create方法接受初始化参数?
class DataProvider {
private $emailProvider;
public function __construct(EmailProvider $emailProvider) {
$this->emailProvider = $emailProvider;
}
public function getEmails($args) {
$this->emailProvider->initialize($args['host'], $args['port']); // bad?
return $this->emailProvider->getAll();
}
}
要进行一些初始化,您可以使用singleton()
调用与闭包绑定您的提供商到容器:
App::singleton(EmailProvider::class, function() {
return new EmailProvider(config('email.host'), config('email.port'));
});
这个调用应该位于一些应用程序提供者(App'Providers
名称空间)