我了解 IoC 的基本概念,但我很难将我的视野扩展到最初的概念之外。
基本上,使用 DI 框架,我不应该再对具有依赖关系的对象使用 new 关键字,因为那时我没有调用 DI 框架解析方法,因此不会触发解析链。
用户想要一个对象A,他需要一个对象B,他想要一个对象C,他想要......
这就是使用 DI 框架会发生的事情。但是使用 new 关键字,我会得到:
我只是实例化一个对象 A
问题1:我说得对吗?错误的 ?还是又是“取决于”的情况?
我刚刚阅读了 Mark Seemann 的回答(https://stackoverflow.com/a/2490797/2671072),他说:
DI Container 应该在应用程序的 Composition Root 中解析整个依赖关系图并让开。
问题 2:他是否暗示应该调用 DI 框架(以解决某些问题)的唯一时间是从应用程序的开始,并且从那里开始,一切都应该没问题,不理会?
我正在做一个项目。但是我很难定义接口和类(实体、值对象、实现)应该去哪里(程序集、命名空间命名......)。
问题 3:DI 是否意味着代码组织的特殊结构?
我听说领域/业务层不应该引用任何 DI 框架。
问题 4:该建议是否也适用于任何其他层?还是假的?
我正在使用两个库(比如 LibraryA 和 LibraryB)。LibraryB 包含三个类,ClassA、ClassB、ClassC。每个类都依赖于前一个(ClassA 是根/聚合)。LibraryA 依赖于 ClassA。
问题5:是在LibraryB内部创建一个工厂,专门创建ClassA及其依赖(只使用new关键字),还是充分利用DI框架,手动注册ClassA,ClassB,ClassC,并解决 ClassA ?