1

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

我有一个ImageGenerator为某些情况生成图像的工具。我在其中“构造函数注入ImageGenerator”了几个字符串(filePaths)和一个Translator类。现在我使用一个实例化ImageGeneratorand的依赖容器来做到这一点Translator。到目前为止,一切都很好。

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

问题是,我如何ImageInterfaceImageGenerator? 我提出了一些选择,但他们都觉得不正确。

任何人都可以启发我吗?


选项 #1,使用 ImageFactory 类

我可以注入ImageGenerator一个实现ImageFactory接口的对象。该ImageFactory接口有一个方法,该方法instantiate($filePath)返回 的新实例ImageInterface。问题是我以这种方式最终得到了很多类和接口:

ImageInterface, ImagickImage, GDImage, ImageFactoryInterface, ImagickImageFactory, GDImageFactory.

选项 #2,在 ImageInterface 中使用静态工厂方法

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

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

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

选项#4

?

4

0 回答 0