我有一个EmailProvider我通过我的构造函数注入。在运行时,需要使用主机,端口等初始化它们。这些设置可以根据不同的用户输入进行更改。什么是初始化注入依赖项的最佳实践方法?
我应该使用create方法注入抽象接口吗?这个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();
}
}
答案 0 :(得分:0)
要进行一些初始化,您可以使用带有闭包的singleton()
调用将您的提供程序绑定到容器:
App::singleton(EmailProvider::class, function() {
return new EmailProvider(config('email.host'), config('email.port'));
});
此调用应位于某些应用程序提供程序(App\Providers
命名空间)