用于实例化依赖注入的新实例的模式?

时间:2019-07-13 19:54:44

标签: php dependency-injection dependencies

是否有一种模式可以在注入依赖时实例化依赖关系?

假设您有Config FooBar使用的Qux类。

代替这样做:

$config = new Config;
new Foo($config);

$config = new Config;
new Bar($config);

$config = new Config;
new Qux($config);

是否存在可以执行类似操作的模式?

$config = new Config;

new Foo($config);
new Bar($config);
new Qux($config);

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找一个依赖注入容器,该容器可以提供(您的Config对象的)“共享”实例。

示例:

composer require league/container
<?php

// container.php

use League\Container\Container;
use League\Container\ReflectionContainer;
use App\Config;

$container = new Container();
$container->delegate(new ReflectionContainer());

$container->share(Config::class, static function () {
    return new Config();
});

您的课程应使用构造函数依赖项注入

示例:

<?php

namespace App\Domain;

use App\Config;

final class Foo
{
    /**
     * @var Config
     */
    private $config;

    public function __construct(Config $config)
    {
        $this->config = $config;
    }

}