我正在潜入依赖注入的世界,我遇到了一个问题。情况如下:
我有一个ImageGenerator
可以为某些情况生成图像。在这个ImageGenerator
I'构造函数中注入'几个字符串(filePaths)和一个Translator
类。现在我使用实例化ImageGenerator
和Translator
的依赖容器来执行此操作。到目前为止一切都很好。
在ImageGenerator内部,我现在已在几个地方硬编码new Imagick(...)
。我正在寻找一种方法来注入这些依赖项,所以我可以在将来切换到不同的图像类。为此,我使用2个类创建了一个抽象:ImagickImage
和GDImage
,它们都实现了ImageInterface
中定义的一组方法。
问题是,如何在ImageInterface
内获取正确ImageGenerator
的实例?我想出了一些选择,但他们都不正确。
任何人都可以启发我吗?
我可以向ImageGenerator
注入一个实现ImageFactory
接口的对象。 ImageFactory
接口有一个方法instantiate($filePath)
,它返回ImageInterface
的新实例。问题是我以这种方式结束了 lot 类和接口:
ImageInterface
,ImagickImage
,GDImage
,ImageFactoryInterface
,ImagickImageFactory
,GDImageFactory
。
由于工厂的instantiate
方法只有一行,我想我可以在instantiate
类中添加静态ImageInterface
方法。然后我可以将ImageInterface
的实例注入ImageGenerator,它将作为工厂来创建新实例。
我还可以将图像类的类名(ImagickImage
或GDImage
)注入ImageGenerator
类。然后我可以根据该类名创建新实例。