我目前正在阅读 Mark Seemann 的“.NET 中的依赖注入”。我想知道编写 DDD ASP.NET MVC 应用程序的最佳方法是什么。
在简化的场景中,一般的经验法则是拥有作为应用程序核心的域模型,并且对数据层或表示没有任何依赖关系。它将暴露 Presentation 将使用的某些接口(因此依赖)和 Data Layer 将实现(因此依赖)。所以一切都很好,很清楚。
但是,现在,当我们编写应用程序时。对于 ASP.NET MVC 应用程序,我们将在 global.asax ( http://blog.ploeh.dk/2011/07/28/CompositionRoot ) 中执行此操作。我们的组合根需要依赖于所有层,因为它需要注册所有适用的类型。
这使得所有依赖项看起来都很混乱,现在表示层有一个对数据访问层的项目引用(在 VS 术语中)。开发人员很容易犯错误并直接使用数据访问层的类型,这将有效地耦合这些层。
有没有一种干净的方法来解决这个难题?将合成根放在表示层之外几乎会很好,但在 MVC 中这是不可能的。
更新
在问了这个问题后,我找到了一个相关的问题: DAL -> BLL <- GUI + composition root。如何设置 DI 绑定? 它有一些有趣的解决方案。公认的解决方案几乎是完美的,但是我希望组合根位于表示层之外,并参考表示层而不是其他方式。
这样做的一个原因是,对我来说,它在概念上更加清晰——构图应该放在最重要的位置。另一个原因是,在我的情况下,表示层中已经有许多 DI 对象(主要是用于查看模型映射器的域对象),我也希望将它们组合在一个位置。
不过,这个帖子给了我一些想法,我认为我想做的事情可能是可能的。