使用依赖注入在类中实例化对象的最佳方法是什么?

时间:2013-10-25 12:27:51

标签: php dependency-injection dependencies service-locator

我正在潜入依赖注入的世界,我遇到了一个问题。情况如下:

我有一个ImageGenerator可以为某些情况生成图像。在这个ImageGenerator I'构造函数中注入'几个字符串(filePaths)和一个Translator类。现在我使用实例化ImageGeneratorTranslator的依赖容器来执行此操作。到目前为止一切都很好。

在ImageGenerator内部,我现在已在几个地方硬编码new Imagick(...)。我正在寻找一种方法来注入这些依赖项,所以我可以在将来切换到不同的图像类。为此,我使用2个类创建了一个抽象:ImagickImageGDImage,它们都实现了ImageInterface中定义的一组方法。

问题是,如何在ImageInterface内获取正确ImageGenerator的实例?我想出了一些选择,但他们都不正确。

任何人都可以启发我吗?


选项#1,使用ImageFactory类

我可以向ImageGenerator注入一个实现ImageFactory接口的对象。 ImageFactory接口有一个方法instantiate($filePath),它返回ImageInterface的新实例。问题是我以这种方式结束了 lot 类和接口:

ImageInterfaceImagickImageGDImageImageFactoryInterfaceImagickImageFactoryGDImageFactory

选项#2,在ImageInterface

中使用静态工厂方法

由于工厂的instantiate方法只有一行,我想我可以在instantiate类中添加静态ImageInterface方法。然后我可以将ImageInterface的实例注入ImageGenerator,它将作为工厂来创建新实例。

选项#3,注入图像的类名

我还可以将图像类的类名(ImagickImageGDImage)注入ImageGenerator类。然后我可以根据该类名创建新实例。

选项#4

0 个答案:

没有答案