·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> .NET服务器定位模式(ServiceLocatorPattern)——CommonServiceLocator
Common Service Locator 代码很简单,它一般不会单独使用,而是作为一个单件模式,与像 .net Unity 这样的依赖注入框架一起使用。Common Service Locator 是 Unity 的一部分。
假设你有一个类,该类依赖几个服务 Service(这些服务也可以看做是几个类),这些服务是在编译阶段指定具体类型的。在接下来的例子中,ClassA 在编译阶段依赖 ServiceA 和 ServiceB。如下图所示。
这样做有如下缺点:
下面说明如何解决这个问题。
使用服务器定位模式可以完成下面的任何一个目标:
创建一个包含那些服务的引用和封装了定位他们的逻辑的服务定位器。在你的类中,使用服务定位器来获得服务的实例。下图说明了类何使用服务器定位器。
服务器定位器模式不会描述如何实例化服务,它描述一个注册服务和定位服务的方法。通常情况下,服务定位器模式结合工厂模式(Factory pattern)和/或依赖注入模式(Dependency Injection pattern)。这种组合使得服务定位器创建服务的实例。
注意:
服务定位器可以定位一个服务,而无需知道它的具体类型。例如,它可能使用一个字符串密钥(string key)或服务接口类型(service interface type)。这样,你就可以替换依赖的具体实现,而无需修改类。
SharePoint Guidance Library 提供了一个服务定位器的实现。SharePointServiceLocator 类提供了访问单件 IServiceLocator 实例并管理该实例,该类一个接口的默认实现——ActivatingServiceLocator,这个类可以创建和定位服务。
The Partner Portal application 展示了如何使用服务定位器注册和定位服务,如信息库(repositories),记录服务(logging services)和配置管理服务(configuration management services)。更多信息,参看 The SharePoint Service Locator。
在使用服务定位器模式前,考虑下面几点:
下面模式与服务定位器模式有关:
依赖注入(Dependency Injection)。这个模式跟服务定位器模式解决的同一个问题,只是使用了不同的方法。
控制反转(Inversion of Control)。服务定位器是控制反转的一个特例。它反转了一个应用程序的传统控制流。它是一个被调用的对象,而不是控制处理的调用者。
参考:
关于服务定位器,更多资料,参看 The SharePoint Service Locator。
下载 CommonServiceLocator
下载 CommonServiceLocator Demo