我是域驱动设计架构的新手。我的项目解决方案是这样的:
我从那些文章中读到了隔离工作以隔离工作。
演示文稿项目参考 ApplicationLayer 但是没有引用QueryLayer,QueryHandlerLayer和DataLayer。
但我正在使用IoC容器并将类型绑定到接口。
我可以在PresentationLayer上执行此操作。但现在所有项目都将添加对表示层的引用。
这是关于架构的问题吗?或者我可以为所有图层分离IoC容器绑定吗?
答案 0 :(得分:2)
使用DI是关于组合应用程序。应用程序可能有多个层,但它们仍然是同一个应用程序的一部分,必须组合在一起。
撰写应用程序的适当位置在composition root,应该尽可能接近应用程序的入口点。
基本上有3种常见的建议来组合具有多个层的应用程序,并且所有这些建议都是完全可以接受的。
对于第3个选项,您应该记住,合成层应该驱动,而不是由应用程序的其余部分驱动。
请参阅this answer了解此引用背后的原因以及为什么从 引用组合根中的每个库以避免紧密耦合非常重要。或者,如上所述,只要您的部署脚本通过DLL复制,您就可以使用后期绑定来组合应用程序而无需直接引用程序集。
答案 1 :(得分:1)
我认为我在最近的使用中学到的最重要的事情是,在基础层面,DI是关于注入依赖性的。这是一个非常多余的描述,所以让我详细说明:
DI从设计开始。一切都应该通过构造函数或某种工厂提供它所需要的东西。这是Interfaces是你最好的朋友。完成此操作后,大部分工作就完成了。假设某些项目是共享的,您现在已将所有工作委托给使用它的任何人。然而,这可能是旧闻。
接下来,如果您控制容器,请考虑创建一个默认模块,在Ninject的情况下为NinjectModule
。为每个应用程序层创建其中一个。这将形成"指令"可以这么说,对于程序最高级别的容器来说,将所有部分放在一起。
这可以通过反射技巧加载,其中有大量信息,like this。
然后就像加载所有这些绑定"说明手册一样简单"进入组合根(通常在应用程序中),你很高兴。