我对DI和IoC容器很陌生。我知道IoC容器应该只存在于项目的组合根目录下。而且我知道该解决方案中的所有其他项目都不应引用IoC容器。
到目前为止一切顺利。...
然后,我考虑了如何在引导后在运行时创建新对象。
我发现了这两篇文章:
http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory/
http://netpl.blogspot.de/2012/12/di-factories-and-composition-root.html
如果我是对的,我必须在引导程序之后为要在运行时实例化的每个对象创建一个工厂。这些工厂将注入IoC容器。
因此,工厂的项目必须引用IoC库(由于构造函数注入)。
最后我很困惑!
这些工厂住在哪里(在哪个项目中?我想知道,因为除组合根项目外,所有其他项目都不应引用IoC库。
我错了?
这些工厂住在哪里(在哪个项目中?我想知道,因为所有其他项目(除了撰写根项目之外)不应具有对IoC库的引用。
如果工厂实现需要引用容器,则必须在Composition Root中定义它。但是,工厂abstraction可以在需要的层中定义。