你在你的应用程序应用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. (转)对DotNet分布式应用搭建的考虑

    设计前的考虑和准备工作 1 对业务需求的理解重要性远远胜于对技术架构的理解 2 架构包含技术架构和业务架构 3 没有万能和通用的架构,只有符合自身业务需求的架构 4 架构本身的复杂性要截至在架构设计阶 ...

  2. JS函数式编程【译】2.3 函数式程序员的工具集

  3. Java中浮点数能连续精确表示整数的范围

    转自http://blog.csdn.net/seizef/article/details/5571783#ref_1,有删改. 先简单介绍一下浮点数在计算机中的组成,在Java中采用的浮点数表示法是 ...

  4. 应用型GIS 地理信息系统设计内容和方法

    挺好的一篇论 文 http://wenku.baidu.com/view/8e40a17c1711cc7931b7165e.html 文章就重点应用型地理信息系统的设计内容.设计过程.相关实现技术与方 ...

  5. iOS相机操作笔记

    最近忙于项目,需要拍摄图片,这里先列出部分测试代码. // // FirstViewController.m // UiTest // // Created by Tang Huaming on 16 ...

  6. Linux C 程序 进程控制(17)

    进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...

  7. AJAX项目中的一些总结

    最近在做AJAX数据处理交互,遇到一些问题,备份以免以后忘记 1.参数地址问题 确保参数地址的正确性 ; 阅读后台源码,参数和返回值要确定: 一般的大点公司应该有规范: 2.关于ajax事件触发请求多 ...

  8. silverlight 画图InkPresenter

    <UserControl x:Class="SilverlightTest.PolygonTest" xmlns="http://schemas.microsoft ...

  9. Android的Handler与Activity线程同步

    假设这里有同一个Runnable对象r. 可能采用的方法有: 第一种: handler.post(r); 实际上这种方法并没有调用线程someThread的start方法,而是直接调用了Runaabl ...

  10. Linux系统下sendmail发送邮件失败的问题

         问题是:安装完sendmail,启动服务后,发送邮件第一次发送成功,后面再次无论怎么发送都不行,换邮箱也不行.在确认我的邮件发送格式正确无误后,想到查看邮件发送日志: [root@backu ...