【问题标题】:How to create a launcher project for ASP.Net MVC Project如何为 ASP.Net MVC 项目创建启动器项目
【发布时间】:2017-02-16 09:48:58
【问题描述】:

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

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

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

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

    提前谢谢你

【问题讨论】:

    标签: dependency-injection ioc-container simple-injector bootstrapper onion-architecture


    【解决方案1】:

    对于大多数项目,这是错误的方法。

    您应该在应用程序的入口点附近创建一个composition root(在一个 MVC 项目中,该项目将位于 Application_Start 事件的某处)。它不应该被移动到它自己的库中because you are not going to reuse it anyway。组合根应用程序的配置,因此您不会将其移动到单独的项目中,就像将 .config 文件移动到单独的项目中一样。

    此外,除非您对将 DLL 后期绑定到您的 AppDomain 有特定要求(例如,上传插件并在不重新启动应用程序的情况下启动它),否则就 IoC 而言,架构类型实际上并不重要。架构是层的逻辑排列,它可能会或可能不会导致层的物理分离。然而,从组合根的角度application should be a flat set of DLL references that contain loosely-coupled components 在组合根中耦合在一起(应用程序中唯一应该紧密耦合在一起的部分)。

    请注意,这并不妨碍您在合成根目录中使用多个类来组织 DI 注册 - 它只是意味着您应该将该代码保留在主项目中,以便可以轻松地对其进行编辑。

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

    【讨论】:

    • 这对我有用:我在一个新项目中创建了一个 CompositionRoot 类并引用了 SimpleInjector。该类有一个名为 Compose() 的公共方法,它注册所需的类型。该项目引用了定义接口和/或实现接口的项目。然后在 MVC 项目中实例化 global.aspx 中的 CompositionRoot 并调用 Compose 方法。通过这种方式,我可以轻松更改我的 DI 容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2019-10-04
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多