PHP 带工厂的依赖注入容器

PHP Dependency Injection Container With Factory

我正在使用 silexphp/Pimple 依赖注入容器 (DIC),但不确定如何处理 classic 工厂模式。

示例:

A parent class Animal.php 有两个 child classes 称为 DogAnimal.phpCatAnimal.php。 child class 的数量 可以 增长。

在这种情况下,我想创建一个工厂来创建新的 Animal Objects 或 children 的 Animal class。 Pimple 允许为每个服务创建工厂方法。

在使用 Pimple DIC 时,我不想将每个子class(狗、猫等)添加为服务。特别是随着列表的增长。对我来说,这似乎是对 DIC 的误用,但也许我错了。

我假设我 应该 创建动物工厂服务并使用 Pimple 将依赖项注入工厂,而工厂又被用来创建新的狗或猫,我是否正确?

是的,你是对的。您可以创建一个服务 (AnimalFactory) 来创建您要使用的对象 (DogAnimalCatAnimal、...)。

一个简单的例子可以是:

class AnimalFactory
{
    public function createAnimal($name)
    {
        // some logic here with $name

        $animal = new ...();
        return $animal;
    }
}

$pimple['animal_factory'] = function ($c) {
    return new AnimalFactory();
};

$dog = $pimple['animal_factory']->createAnimal('Dog');