你在你的应用程序应用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

Unity Adapter下载:

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的更多相关文章

  1. Atitit。如何实现dip, di ,ioc ,Service Locator的区别于联系

    Atitit.如何实现dip, di ,ioc  ,Service Locator的区别于联系 1. Dip原则又来自于松耦合思想方向1 2. 要实现dip原则,有以下俩个模式1 3. Ioc和di的 ...

  2. .NET 服务器定位模式(Service Locator Pattern)——Common Service Locator

    本文内容 场景 目标 解决方案 实现细节 思考 相关模式 更多信息 参考资料 Common Service Locator 代码很简单,它一般不会单独使用,而是作为一个单件模式,与像 .net Uni ...

  3. autofac使用Common Serivce Locator跟随wcf,mvc,web api的实例控制

    autofac本身只提供了基本的ioc容器的功能 要想在mvc,wcf,web api中使用,除了autofac本身,还需要引入对应的包(点击对应连接可查看文档) 除此之外,使用Common Serv ...

  4. Microsoft实现的IOC DI之 Unity 、Service Locator、MEF

    这几个工具的站点 Microsoft Unity  http://unity.codeplex.com Service Locator http://commonservicelocator.code ...

  5. 服务定位器(Service Locator)

    服务定位器(Service Locator) 跟DI容器类似,引入Service Locator目的也在于解耦.有许多成熟的设计模式也可用于解耦,但在Web应用上, Service Locator绝对 ...

  6. 【转】Understanding Inversion of Control, Dependency Injection and Service Locator Print

    原文:https://www.dotnettricks.com/learn/dependencyinjection/understanding-inversion-of-control-depende ...

  7. 依赖注入与Service Locator

    为什么需要依赖注入? ServiceUser是组件,在编写者之外的环境内被使用,且使用者不能改变其源代码. ServiceProvider是服务,其类似于ServiceUser,都要被其他应用使用,不 ...

  8. PHP中应用Service Locator服务定位及单例模式

    单例模式将一个对象实例化后,放在静态变量中,供程序调用. 服务定位(ServiceLocator)就是对象工场Factory,调用者对象直接调用Service Locator,与被调用对象减轻了依赖关 ...

  9. Service Locator 模式

    什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该 ...

随机推荐

  1. jquery的延迟加载插件Lazy Load Plugin for jQuery

    下载:https://github.com/tuupola/jquery_lazyload 使用:http://www.appelsiini.net/projects/lazyload 翻译:http ...

  2. hibernate结合使用gson转换json中一点看法

    转发请注明出处:http://www.cnblogs.com/shizhongtao/p/3680216.html 在前后台的交互中,经常需要把bean对象与xml或者json,这里就把自己以前遇到的 ...

  3. bootstrap时间插件 火狐不显示 完美解决方法

    原文链接:http://www.phpbiji.cn/article/index/id/141/cid/4.html bootstrap时间插件火狐 bootstrap-datetimepicker火 ...

  4. mount.nfs: access denied by server while mounting localhost:/home/xuwq/minilinux/system

    在执行命令如下: mount -t nfs localhost:/home/xuwq/minilinux/system /mnt 出现的错误: mount.nfs: access denied by ...

  5. 【Qt】Qt环境搭建(Qt Creator)【转】

    简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...

  6. (转)android底部弹出iOS7风格对话选项框(QQ对话框)--第三方开源--IOS_Dialog_Library

    本文转载于:http://blog.csdn.net/zhangphil/article/details/44940339 完成这个效果的是使用了 IOS_Dialog_Library 下载地址:ht ...

  7. sqlchemy - day3

         session 直接上代码,创建表结构,初始化部分数据. from sqlalchemy import create_engine engine = create_engine(" ...

  8. Python开发【第一篇】Python模块中特殊变量

    模块中特殊变量 生产环境中,常用的就是__name__和__file__ __doc__ __package__ __cached__ __name__ __file__ 一. __doc__  #获 ...

  9. CentOS 7.0安装MPlayer

    自带的播放器不管rmvb还是mp4都不能播放,也搜索不到解码器. CentOS7epel装不上所以也没有rpmfusion,所以决定自己编译mplayer 首先是要获取源代码. 首先是主程序的源代码. ...

  10. mac安装cocoapods

    sudo gem install cocoapods