首页 文章

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

提问于
浏览
1

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

  • 我应该为我的启动器创建什么类型的项目(MVC或类库...)

  • bootstraper如何启动MVC项目?

  • bootstraper是否应该引用ASP.NET MVC包?

先感谢您

1 回答

  • 3

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

    您应该在应用程序的入口点附近创建composition root(在 Application_Start 事件中的某个MVC项目中) . 它不应该被移动到它自己的because you are not going to reuse it anyway库中 . 组合根是应用程序's configuration, so you wouldn' t将其移动到单独的项目,而不是将 .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是什么以及应该如何使用DI,架构部分就会变得更加清晰 .

相关问题