【问题标题】:When should I use a static IoC container?什么时候应该使用静态 IoC 容器?
【发布时间】:2011-08-28 23:30:26
【问题描述】:

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

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

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

如果首选静态方式,我是否必须将我的基础容器保持在单例范围内并在 Global.asax 中对其进行初始化,并始终通过静态类访问我的容器?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      另外,here 是一个潜在的解决方案,适用于有人使用自定义成员资格提供程序和依赖注入的情况。

      请参阅此other question 以获得良好的讨论,您还可以阅读 autofac 网站上的一些 best practices

      【讨论】:

        【解决方案3】:

        没有要求 IoC 容器必须是静态的,实际上您可以创建任意数量的容器 - 这完全取决于您的需要。您可能已经发现,在某些情况下您需要静态容器。

        【讨论】:

        • 请提供更多细节。我还问了一些关于静态访问的特殊问题。
        猜你喜欢
        • 2016-02-15
        • 2019-07-12
        • 2011-03-23
        • 2011-08-01
        • 2010-09-17
        • 1970-01-01
        • 2023-04-02
        • 2011-04-15
        • 2017-04-10
        相关资源
        最近更新 更多