我是IoC和依赖注入和洋葱架构的新手。我正在尝试根据洋葱架构社区的指南和最佳实践创建我的解决方案架构。 在我的VS解决方案中,我有一些针对域核心的项目,一些针对基础架构,一些针对用户界面的ASP.NET MVC。现在我想在解决方案中添加一个IoC容器。我知道最好的做法是添加一个引导程序或启动程序项目,它引用了IoC容器(在我的案例中为Simple Injector)和解决方案中的所有项目。通过这种方式,我可以将整个解决方案与IoC Container分离,并且我可以在将来轻松地将其替换为其他解决方案。现在我的问题:
我应该为我的启动器创建什么类型的项目(MVC或Class 图书馆......)
bootstraper如何启动MVC项目?
bootstraper是否应该引用ASP.NET MVC包?
提前谢谢
答案 0 :(得分:3)
对于大多数项目来说,这是错误的方法。
您应该在应用程序的入口点附近创建composition root(在Application_Start
事件中的某个MVC项目中)。它不应该移动到自己的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在组合根(应该紧密耦合在一起的应用程序的唯一部分)中耦合在一起。 / p>
请注意,这并不妨碍您在合成根目录中使用多个类来组织DI注册 - 这只是意味着您应该将该代码保存在主项目中,以便轻松编辑。
最后,在StackOverflow上经常以一种或另一种形式提出这个问题。对于那些正在寻找关于正确使用DI的好处以及错误使用DI的缺点的最终答案的人,我建议您阅读本书Dependency Injection in .NET。一旦了解了DI是什么以及应该如何使用,架构部分就会变得更加清晰。