PHP依赖注入容器与工厂
作者:互联网
我正在使用silexphp / Pimple依赖注入容器(DIC),并且不确定如何处理经典的Factory模式.
例:
父类Animal.php有两个名为DogAnimal.php和CatAnimal.php的子类.子类的数量可以增长.
在这种情况下,我想创建一个Factory来创建新的Animal对象或Animal类的子对象. Pimple允许每个服务创建Factory方法.
在使用Pimple DIC时,我认为我不想将每个子类(Dog,Cat等)添加为服务.特别是随着名单的增长.对我来说,这似乎是对DIC的滥用,但也许我错了.
我是否正确地假设我应该创建一个动物工厂服务并使用Pimple将依赖关系注入工厂,而工厂又会习惯于创建一个新的Dog或Cat?
解决方法:
你是对的.您可以创建一个服务(AnimalFactory)来创建您想要使用的对象(DogAnimal,CatAnimal,…).
一个简单的例子可以是:
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');
标签:php,dependency-injection,subclass,pimple 来源: https://codeday.me/bug/20190628/1311995.html