Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 如何在多层解决方案上正确使用StructureMap(或任何其他IoC容器)?_Dependency Injection_Inversion Of Control_Ioc Container_Structuremap_Structuremap3 - Fatal编程技术网

Dependency injection 如何在多层解决方案上正确使用StructureMap(或任何其他IoC容器)?

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.就

我有一个具有以下结构的3层解决方案:


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。相关: