如何为 ASP.Net MVC 项目创建启动器项目

How to create a launcher project for ASP.Net MVC Project

我是 IoC 和依赖注入以及 Onion 架构的新手。我正在尝试根据 Onion Architecture 社区中的指南和最佳实践来创建我的解决方案架构。 在我的 VS 解决方案中,我有一些项目用于域核心,一些项目用于基础设施,还有一个 ASP.NET MVC 用于用户界面。现在我想在解决方案中添加一个 IoC 容器。我知道最好的做法是添加一个引导程序或启动程序项目,它引用了 IoC 容器(在我的例子中是简单注入器)和解决方案中的所有项目。通过这种方式,我可以将整个解决方案与 IoC Container 解耦,并且将来可以轻松地用其他解决方案替换它。现在我的问题:

  1. 我应该为我的启动器创建什么类型的项目(MVC 或 Class 图书馆...)

  2. 引导程序如何启动 MVC 项目?

  3. 引导程序是否应该引用 ASP.NET MVC 包?

    提前谢谢你

对于大多数项目来说,这是错误的做法。

您应该创建一个 composition root near to the entry point of the application (in an MVC project that would be somewhere in the Application_Start event). It should not be moved into a library of its own because you are not going to reuse it anyway。组合根 应用程序的配置,因此您不会将其移动到单独的项目,就像将 .config 文件移动到单独的项目一样。

此外,除非您对 AppDomain 的 late-bind DLL 有特定要求(例如,上传插件并在不重新启动应用程序的情况下启动它),体系结构的类型实际上无关紧要国际奥委会关注。架构是层的逻辑排列,它可能会或可能不会导致层的物理分离。但是,从组合根的角度来看,在组合根中耦合在一起的application should be a flat set of DLL references that contain loosely-coupled components(应用程序中唯一应该tightly-coupled在一起的部分)。

请注意,这并不妨碍您使用多个 类 在组合根目录中组织您的 DI 注册 - 这只是意味着您应该将该代码保留在主项目中,在那里可以轻松编辑.

最后,这个问题在 Whosebug 上经常以一种或另一种形式被问到。对于那些正在寻找关于正确使用 DI 的好处和不正确使用它的缺点的明确答案的人,我建议阅读这本书 Dependency Injection in .NET。一旦您理解了 DI 是什么以及它应该如何使用,体系结构部分就会变得更加清晰。