分享
 
 
 

参考资料

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

本文内容场景目标解决方案实现细节思考相关模式更多信息参考资料Common Service Locator 代码很简单,它一般不会单独使用,而是作为一个单件模式,与像 .net Unity 这样的依赖注入框架一起使用。Common Service Locator 是 Unity 的一部分。

下载 CommonServiceLocator下载 CommonServiceLocator Demo场景假设你有一个类,该类依赖几个服务 Service(这些服务也可以看做是几个类),这些服务是在编译阶段指定具体类型的。在接下来的例子中,ClassA在编译阶段依赖ServiceA和ServiceB。如下图所示。

这样做有如下缺点:

若替换或更新所依赖的服务(或类),显然,必须修改源代码,并且重新编译解决方案;这些所依赖的具体实现(依赖的服务的具体实现)必须在编译时可用;你的类很难单独测试,因为它们直接引用了那些依赖。这意味着这些依赖不能用 stubs 或 mock 对象替换;你的类包含创建、查找和管理这些依赖的重复代码。下面说明如何解决这个问题。

目标使用服务器定位模式可以完成下面的任何一个目标:

你想从那些依赖解耦你的类,这样那些依赖就可以被替换或更新,而不需要或很少修改你的类;你想写逻辑代码,而逻辑代码取决于那些依赖的类,但那些依赖类的具体实现在编译阶段是不知道的;你想在不使用那些依赖的情况下单独测试你的类;你不想在你的类中写查找和管理那些依赖类的代码;你想把你的应用程序划分成松散的耦合模块,这样就可以单独开发、测试、版本控制和部署。解决方案创建一个包含那些服务的引用和封装了定位他们的逻辑的服务定位器。在你的类中,使用服务定位器来获得服务的实例。下图说明了类何使用服务器定位器。

服务器定位器模式不会描述如何实例化服务,它描述一个注册服务和定位服务的方法。通常情况下,服务定位器模式结合工厂模式(Factory pattern)和/或依赖注入模式(Dependency Injection pattern)。这种组合使得服务定位器创建服务的实例。

注意:

服务定位器可以定位一个服务,而无需知道它的具体类型。例如,它可能使用一个字符串密钥(string key)或服务接口类型(service interface type)。这样,你就可以替换依赖的具体实现,而无需修改类。

现实细节SharePoint Guidance Library 提供了一个服务定位器的实现。SharePointServiceLocator类提供了访问单件 IServiceLocator 实例并管理该实例,该类一个接口的默认实现——ActivatingServiceLocator,这个类可以创建和定位服务。

The Partner Portalapplication展示了如何使用服务定位器注册和定位服务,如信息库(repositories),记录服务(logging services)和配置管理服务(configuration management services)。更多信息,参看 The SharePoint Service Locator。

思考在使用服务定位器模式前,考虑下面几点:

There are more solution elements to manage.You must write additional code that adds service references to the service locator before your objects can use it.Your classes have a dependency on the service locator.The source code is more complex and difficult to understand.You can use configuration data to define run-time relationships.You mustPRovide implementations of the services. Because the Service Locator pattern decouples service consumers from service providers, it might be necessary to provide additional logic. This logic ensures that the service providers are installed and registered before service consumers try to locate them.相关模式下面模式与服务定位器模式有关:

    依赖注入(Dependency Injection)。这个模式跟服务定位器模式解决的同一个问题,只是使用了不同的方法。

    控制反转(Inversion of Control)。服务定位器是控制反转的一个特例。它反转了一个应用程序的传统控制流。它是一个被调用的对象,而不是控制处理的调用者。

更多信息参考:

Inversion of Control and the Dependency Injection pattern on Martin Fowler's Web siteService Locator on MSDN关于服务定位器,更多资料,参看 The SharePoint Service Locator。

参考资料Microsoft Developer Network - The Service Locator PatternThe SharePoint Service Locator控制反转和依赖注入模式 by Martin FowlerService LocatorCommon Service Locator libraryService Locator is an Anti-Pattern by Mark Seemann 

下载 CommonServiceLocator

下载 CommonServiceLocator Demo

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有