【IOC--Common Service Locator】不依赖于某个具体的IoC
你在你的应用程序应用IoC容器了吗,你是否希望不依赖于某个具体的IoC,微软的模式与实践团队在Codeplex上发布的Common Service Locator。Common Service Locator 类库包含应用程序和框架开发者引用Service location共享的接口。这个类库提供了在IOC容器和Service locators之上抽象。使用这个类库允许一个应用程序在没有强引用依赖下间接的访问的能力。它所定义的接口非常简单:{
http://www.cnblogs.com/shanyou/archive/2008/12/27/1363785.html
http://commonservicelocator.codeplex.com/wikipage?title=Unity%20Adapter&referringTitle=Home
UnityServiceLocator.cs
using System;
using System.Collections.Generic;
using Microsoft.Practices.ServiceLocation; namespace Microsoft.Practices.Unity.ServiceLocatorAdapter
{
public class UnityServiceLocator : ServiceLocatorImplBase
{
private IUnityContainer container; public UnityServiceLocator(IUnityContainer container)
{
this.container = container;
} /// <summary>
/// When implemented by inheriting classes, this method will do the actual work of resolving
/// the requested service instance.
/// </summary>
/// <param name="serviceType">Type of instance requested.</param>
/// <param name="key">Name of registered service you want. May be null.</param>
/// <returns>
/// The requested service instance.
/// </returns>
protected override object DoGetInstance(Type serviceType, string key)
{
return container.Resolve(serviceType, key);
} /// <summary>
/// When implemented by inheriting classes, this method will do the actual work of
/// resolving all the requested service instances.
/// </summary>
/// <param name="serviceType">Type of service requested.</param>
/// <returns>
/// Sequence of service instance objects.
/// </returns>
protected override IEnumerable<object> DoGetAllInstances(Type serviceType)
{
return container.ResolveAll(serviceType);
}
}
}
ServiceLocatorImplBase
#region 程序集 Microsoft.Practices.ServiceLocation.dll, v2.0.50727
\CommonServiceLocator.UnityAdapter\Lib\Microsoft.Practices.ServiceLocation.dll
#endregion using System;
using System.Collections.Generic; namespace Microsoft.Practices.ServiceLocation
{
// 摘要:
// This class is a helper that provides a default implementation for most of
// the methods of Microsoft.Practices.ServiceLocation.IServiceLocator.
public abstract class ServiceLocatorImplBase : IServiceLocator, IServiceProvider
{
protected ServiceLocatorImplBase(); // 摘要:
// When implemented by inheriting classes, this method will do the actual work
// of resolving all the requested service instances.
//
// 参数:
// serviceType:
// Type of service requested.
//
// 返回结果:
// Sequence of service instance objects.
protected abstract IEnumerable<object> DoGetAllInstances(Type serviceType);
//
// 摘要:
// When implemented by inheriting classes, this method will do the actual work
// of resolving the requested service instance.
//
// 参数:
// serviceType:
// Type of instance requested.
//
// key:
// Name of registered service you want. May be null.
//
// 返回结果:
// The requested service instance.
protected abstract object DoGetInstance(Type serviceType, string key);
//
// 摘要:
// Format the exception message for use in an Microsoft.Practices.ServiceLocation.ActivationException
// that occurs while resolving multiple service instances.
//
// 参数:
// actualException:
// The actual exception thrown by the implementation.
//
// serviceType:
// Type of service requested.
//
// 返回结果:
// The formatted exception message string.
protected virtual string FormatActivateAllExceptionMessage(Exception actualException, Type serviceType);
//
// 摘要:
// Format the exception message for use in an Microsoft.Practices.ServiceLocation.ActivationException
// that occurs while resolving a single service.
//
// 参数:
// actualException:
// The actual exception thrown by the implementation.
//
// serviceType:
// Type of service requested.
//
// key:
// Name requested.
//
// 返回结果:
// The formatted exception message string.
protected virtual string FormatActivationExceptionMessage(Exception actualException, Type serviceType, string key);
//
// 摘要:
// Get all instances of the given TService currently registered in the container.
//
// 类型参数:
// TService:
// Type of object requested.
//
// 返回结果:
// A sequence of instances of the requested TService.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is are errors resolving the service instance.
public virtual IEnumerable<TService> GetAllInstances<TService>();
//
// 摘要:
// Get all instances of the given serviceType currently registered in the container.
//
// 参数:
// serviceType:
// Type of object requested.
//
// 返回结果:
// A sequence of instances of the requested serviceType.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is are errors resolving the service instance.
public virtual IEnumerable<object> GetAllInstances(Type serviceType);
//
// 摘要:
// Get an instance of the given TService.
//
// 类型参数:
// TService:
// Type of object requested.
//
// 返回结果:
// The requested service instance.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is are errors resolving the service instance.
public virtual TService GetInstance<TService>();
//
// 摘要:
// Get an instance of the given named TService.
//
// 参数:
// key:
// Name the object was registered with.
//
// 类型参数:
// TService:
// Type of object requested.
//
// 返回结果:
// The requested service instance.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is are errors resolving the service instance.
public virtual TService GetInstance<TService>(string key);
//
// 摘要:
// Get an instance of the given serviceType.
//
// 参数:
// serviceType:
// Type of object requested.
//
// 返回结果:
// The requested service instance.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is an error resolving the service instance.
public virtual object GetInstance(Type serviceType);
//
// 摘要:
// Get an instance of the given named serviceType.
//
// 参数:
// serviceType:
// Type of object requested.
//
// key:
// Name the object was registered with.
//
// 返回结果:
// The requested service instance.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is an error resolving the service instance.
public virtual object GetInstance(Type serviceType, string key);
//
// 摘要:
// Implementation of System.IServiceProvider.GetService(System.Type).
//
// 参数:
// serviceType:
// The requested service.
//
// 返回结果:
// The requested object.
//
// 异常:
// Microsoft.Practices.ServiceLocation.ActivationException:
// if there is an error in resolving the service instance.
public virtual object GetService(Type serviceType);
}
}
【IOC--Common Service Locator】不依赖于某个具体的IoC的更多相关文章
- Atitit。如何实现dip, di ,ioc ,Service Locator的区别于联系
Atitit.如何实现dip, di ,ioc ,Service Locator的区别于联系 1. Dip原则又来自于松耦合思想方向1 2. 要实现dip原则,有以下俩个模式1 3. Ioc和di的 ...
- .NET 服务器定位模式(Service Locator Pattern)——Common Service Locator
本文内容 场景 目标 解决方案 实现细节 思考 相关模式 更多信息 参考资料 Common Service Locator 代码很简单,它一般不会单独使用,而是作为一个单件模式,与像 .net Uni ...
- autofac使用Common Serivce Locator跟随wcf,mvc,web api的实例控制
autofac本身只提供了基本的ioc容器的功能 要想在mvc,wcf,web api中使用,除了autofac本身,还需要引入对应的包(点击对应连接可查看文档) 除此之外,使用Common Serv ...
- Microsoft实现的IOC DI之 Unity 、Service Locator、MEF
这几个工具的站点 Microsoft Unity http://unity.codeplex.com Service Locator http://commonservicelocator.code ...
- 服务定位器(Service Locator)
服务定位器(Service Locator) 跟DI容器类似,引入Service Locator目的也在于解耦.有许多成熟的设计模式也可用于解耦,但在Web应用上, Service Locator绝对 ...
- 【转】Understanding Inversion of Control, Dependency Injection and Service Locator Print
原文:https://www.dotnettricks.com/learn/dependencyinjection/understanding-inversion-of-control-depende ...
- 依赖注入与Service Locator
为什么需要依赖注入? ServiceUser是组件,在编写者之外的环境内被使用,且使用者不能改变其源代码. ServiceProvider是服务,其类似于ServiceUser,都要被其他应用使用,不 ...
- PHP中应用Service Locator服务定位及单例模式
单例模式将一个对象实例化后,放在静态变量中,供程序调用. 服务定位(ServiceLocator)就是对象工场Factory,调用者对象直接调用Service Locator,与被调用对象减轻了依赖关 ...
- Service Locator 模式
什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该 ...
随机推荐
- 【学习笔记】【C语言】指向函数的指针
每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...
- 9款让你眼前一亮的HTML5/CSS3示例及源码
1.HTML5 3D点阵列波浪翻滚动画 今天我们要再分享一款基于HTML5 3D的点阵列波浪翻滚动画特效,同样是非常的壮观. 在线演示 源码下载 2.HTML5小球弹跳动画 很不错的3D小球 今天我要 ...
- javascript 获取项目根路径
/** * http://localhost:8088/projectName */ function getRootPath(){ //获取当前网址,如: http://localhost:8088 ...
- AD查询1000条限制和解决方案
公司的一个项目要从AD上取数据,为了测试性能,批量在AD上创建了2000多个用户.但是用java程序获取所有用户的时候会报错或者只能取到1000条数据. 条数据. 用org.springfra ...
- 济南学习 Day 3 T3 pm
仙人掌(cactus)Time Limit:1000ms Memory Limit:64MB题目描述LYK 在冲刺清华集训(THUSC) !于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果. ...
- STL学习笔记序言
笔者作为计算机科学与技术专业的学生,学习并使用C++已经有3年了.在接触STL之前的编程习惯是,所有程序的功能包括数据结构.算法等都是亲自实现,效率极其缓慢.后来从使用STL的vector开始慢慢的感 ...
- html5圆角
以下是代码片段:#roundCornerI{ font-family: Arial; border: 5px solid #dedede; -moz-border-radius-tople ...
- IEEE Floating Point Standard (IEEE754浮点数表示法标准)
浮点数与定点数表示法是我们在计算机中常用的表示方法 所以必须要弄懂原理,特别是在FPGA里面,由于FPGA不能像在MCU一样直接用乘除法. 定点数 首先说一下简单的定点数,定点数是克服整数表示法不能表 ...
- Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html 介绍到了在MongoDB的控制台完成MongoDB的数据操作,通 ...
- setEllipsize(TruncateAt where)
void android.widget.TextView.setEllipsize(TruncateAt where) public void setEllipsize (TextUtils.Trun ...