初始化注入依赖项的最佳实践?

时间:2015-08-07 01:24:22

标签: php laravel dependency-injection

我有一个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();
  }

}

1 个答案:

答案 0 :(得分:0)

要进行一些初始化,您可以使用带有闭包的singleton()调用将您的提供程序绑定到容器:

App::singleton(EmailProvider::class, function() {
    return new EmailProvider(config('email.host'), config('email.port'));
});

此调用应位于某些应用程序提供程序(App\Providers命名空间)