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

时间:2011-08-28 23:30:26

标签: .net asp.net-mvc asp.net-mvc-3 dependency-injection inversion-of-control

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

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

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

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

3 个答案:

答案 0 :(得分:8)

静态Service Locator is just never a good idea。 ASP.NET Provider模型受到 Constrained Construction 反模式以及host of other issues的影响。最好尽可能避免(通常是)。

答案 1 :(得分:5)

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

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

对于有人使用自定义成员资格提供程序和依赖注入的人来说,here也是一个潜在的解决方案。

有关详细讨论,请参阅此other question,您还可以在autofac网站上阅读一些best practices

答案 2 :(得分:4)

不要求IoC容器必须是静态的,事实上你可以根据需要创建多少 - 这一切都取决于你需要什么。您可能已经发现,有些情况下您需要一个静态容器。