我正在深入依赖注入的世界,但遇到了问题。情况如下:
我有一个ImageGenerator
为某些情况生成图像的工具。我在其中“构造函数注入ImageGenerator
”了几个字符串(filePaths)和一个Translator
类。现在我使用一个实例化ImageGenerator
and的依赖容器来做到这一点Translator
。到目前为止,一切都很好。
在 ImageGenerator 内部,我现在new Imagick(...)
在几个地方进行了硬编码。我也在寻找一种注入这些依赖项的方法,以便将来可以切换到不同的图像类。为此,我使用 2 个类创建了一个抽象:它们ImagickImage
都GDImage
实现了ImageInterface
.
问题是,我如何ImageInterface
在ImageGenerator
? 我提出了一些选择,但他们都觉得不正确。
任何人都可以启发我吗?
选项 #1,使用 ImageFactory 类
我可以注入ImageGenerator
一个实现ImageFactory
接口的对象。该ImageFactory
接口有一个方法,该方法instantiate($filePath)
返回 的新实例ImageInterface
。问题是我以这种方式最终得到了很多类和接口:
ImageInterface
, ImagickImage
, GDImage
, ImageFactoryInterface
, ImagickImageFactory
, GDImageFactory
.
选项 #2,在 ImageInterface 中使用静态工厂方法
由于工厂的instantiate
方法只有一行,我想我可以instantiate
在类中添加一个静态方法ImageInterface
。然后我可以将一个实例注入ImageInterface
到 ImageGenerator 中,它将作为创建新实例的工厂。
选项#3,注入图像的类名
我还可以将图像类的类名(ImagickImage
或GDImage
)注入到ImageGenerator
类中。然后我可以根据该类名创建新实例。
选项#4
?