我什么时候应该使用静态IoC容器?

Any*_*One 3 .net asp.net-mvc dependency-injection inversion-of-control asp.net-mvc-3

一些程序员使用静态类方法访问他们的IoC容器.它只是一种偏好,还是一种要求?

如果我的自定义成员资格提供程序需要DataContext,如何在没有静态类的情况下将DataContext注入其中?

我的方法是通过自定义成员资格提供程序中的静态类访问我的容器.是正确的解决方案吗?

如果首选静态方式,我是否必须将我的基本容器保留在单一范围内并在Global.asax中初始化它并始终​​通过静态类访问我的容器?

Mar*_*ann 8

静态服务定位器永远不是一个好主意.ASP.NET Provider模型受到Constrained Construction反模式以及许多其他问题的困扰.最好避免(如果可能的话)(通常是).


bro*_*die 5

避免静态IoC访问或服务定位器模式的最常见原因是它增加了额外的依赖性,这使单元测试变得复杂.

您应该尽可能使用构造函数注入.

另外这里是你潜在的解决方案,其中有人使用自定义成员资格提供者和依赖注入.

请参阅此其他问题以获得良好的讨论,您还可以阅读autofac网站上的一些最佳实践.