【问题标题】:Are Consumers of ServiceLocator supposed to call ServiceLocator.Current?ServiceLocator 的消费者是否应该调用 ServiceLocator.Current?
【发布时间】:2011-03-12 11:15:02
【问题描述】:

我正在尝试重构我的代码以使用Common Service Locator。我有一个供其他组件使用的共享库。

我不明白的是:这些组件是否应该调用 ServiceLocator.Current 并解析它们的类型?在这种情况下,如何确保 ServiceLocator.Current 已实际设置?我应该创建自己的“MyServiceLocator”并添加一个静态构造函数吗? (这似乎违背了拥有标准化抽象的目的)

或者我的共享库是否应该有一个将所有可解析类型公开为公共属性的类,从而将 ServiceLocator 完全保留在共享库内部? (这意味着在抽象之上有一个抽象)?

问题是组件不是通过 DI 创建的,而是应该调用 Container 来获取所需的任何东西。

【问题讨论】:

    标签: .net dependency-injection service-locator


    【解决方案1】:

    shouldn't be using a Service Locator at all。相反,通过允许您(或任何 DI 容器)将适当的依赖项注入到它们中,确保所有依赖项的消费者对可扩展性开放构造函数注入通常是最好的选择。

    Krzysztof Kozmic 最近发表了一篇很好的关于how a DI Container should be used 的概述。他的示例使用 Castle Windsor,但您可以推断到任何 DI 容器以及 Common Service Locator。但是,如果您遵循这些原则,Common Service Locator 就变得多余了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多