Dependency injection 如何在多层解决方案上正确使用StructureMap(或任何其他IoC容器)?
我有一个具有以下结构的3层解决方案:Dependency injection 如何在多层解决方案上正确使用StructureMap(或任何其他IoC容器)?,dependency-injection,inversion-of-control,ioc-container,structuremap,structuremap3,Dependency Injection,Inversion Of Control,Ioc Container,Structuremap,Structuremap3,我有一个具有以下结构的3层解决方案: UI->BLL我从来没有使用过StructureMap,所以我的答案不是关于StructureMap或者如何使用它 当您使用依赖项注入时,所有这些都围绕您的应用程序。这里是编写完整应用程序的地方,因此这里也需要对您的应用程序有完整的了解 如果确实不想从UI引用DAL,可以将组合根目录放在不同的程序集中,并从UI程序集中引用该程序集 但是有什么区别呢?通过从UI引用BL和DAL程序集,只要您仅从组合根引用DAL中的类,而不直接在控制器中使用它们,I.M.O.就
UI->BLL我从来没有使用过StructureMap,所以我的答案不是关于StructureMap或者如何使用它 当您使用依赖项注入时,所有这些都围绕您的应用程序。这里是编写完整应用程序的地方,因此这里也需要对您的应用程序有完整的了解 如果确实不想从UI引用DAL,可以将组合根目录放在不同的程序集中,并从UI程序集中引用该程序集 但是有什么区别呢?通过从UI引用BL和DAL程序集,只要您仅从组合根引用DAL中的类,而不直接在控制器中使用它们,I.M.O.就没有做错任何事情。除了创造可能的错误,没有其他真正的问题 关于你的第二个问题。您的应用程序必须有一个且只有一个DI容器。将其拆分为多个容器会给您带来麻烦。MarkSeeman已经提到的博客明确指出,每个应用程序都需要一个单一的合成根 一个好的DI容器将为您提供各种选项来控制所创建对象的生命周期,因此,只要您给容器这样做的机会,就不需要所有的单例
我选择的DI容器是。您可以开始阅读有关此容器的信息。Simple Injector还为您提供了快速入门软件包,并拥有非常热情的社区,他们总是乐于帮助您。感谢您的帮助。SimpleInjector非常简单,在阅读了您的答案后,我已经替换了StructureMap。我所做的最初是在UI之外创建容器,但根据关于composition root的博客文章,唯一调用它的地方是global.asax中的MVC应用程序。正如您所说,我这样做是为了防止在UI中使用DAL。相关: