1

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

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

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

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

4

1 回答 1

3

根本不应该使用服务定位器。相反,通过允许您(或任何 DI 容器)向它们注入适当的依赖项,确保所有依赖项的消费者都对可扩展性开放。构造函数注入通常是最好的选择。

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

于 2010-07-07T02:27:39.007 回答