一些程序员使用静态类方法访问他们的IoC容器。它只是一种偏好,还是一种要求?
如果我的自定义成员资格提供程序需要DataContext,如何在没有静态类的情况下将DataContext注入其中?
我的方法是通过自定义成员资格提供程序中的静态类访问我的容器。是正确的解决方案吗?
如果首选静态方式,我是否必须将我的基本容器保留在单一范围内并在Global.asax中初始化它并始终通过静态类访问我的容器?
答案 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容器必须是静态的,事实上你可以根据需要创建多少 - 这一切都取决于你需要什么。您可能已经发现,有些情况下您需要一个静态容器。