【发布时间】:2019-01-14 07:25:06
【问题描述】:
我在我的 PHP 项目中使用 PHP-DI 6 容器。在我的程序开始时,我只是初始化了容器并获得了 Application 类并注入了所有依赖项。
$container = new Container();
$application = $container->get(Application::class);
$application->initialize();
$application->run();
在下图中,您可以看到我在项目中使用的类。
Asterisk Dispatcher 被注入到 Application 类中。
private $asteriskDispatcher;
public function __construct(AsteriskDispatcher $asteriskDispatcher)
{
$this->asteriskDispatcher = $asteriskDispatcher;
}
然后,在 AsteriskDispatcher 类中,我需要创建一个 Asterisk Manager 实例列表,它还将在不久的将来包含一些依赖项。
我不想通过所有类继承容器。有没有办法将 PHP-DI 容器初始化为单例,所以我可以随时使用它来创建一些对象?
这就是我现在的做法,我只是在我的 AsteriskDispatcher 类中创建了一个新的 PHP-DI 容器实例,这看起来太糟糕了。
class AsteriskDispatcher implements AsteriskDispatcherInterface
{
private $listOfAsteriskManagers;
public function __construct()
{
$configurations = AsteriskConnectionsConfiguration::$connectionsConfiguration;
$this->listOfAsteriskManagers = new \SplDoublyLinkedList();
$container = new Container();
foreach ($configurations as $configuration)
{
$this->listOfAsteriskManagers->push($container->make(AsteriskManager::class,
array('configuration' => $configuration)));
}
}
}
我真的很想了解如何在不违反 SOLID 原则的情况下使用 PHP-DI 容器。
【问题讨论】:
标签: php oop dependency-injection php-di