Common Service Locator的Unity适配器

Common Service Locator介绍

Common Service Locator 类库包含应用程序和框架开发者引用Service location共享的接口。这个类库提供了在IOC容器和Service locators之上抽象。使用这个类库允许一个应用程序在没有强引用依赖下间接的访问的能力。期望用这个类库,第三方应用程序和框架开始利用IOC/Service location改变在没有绑定他们到一个具体的实现。
   这个项目包括所有验证过locator功能需求的具体实现测试套件。另外,在未来日子里项目中将包含几个流行IOC容器适配器程序。

Common Service Locator官方与下载
http://www.codeplex.com/CommonServiceLocator

接下来先来看一上适配器的代码:

UnityServiceLocator

测试的接口,实现类参看 UnityAdapter.Tests项目,接下来看下用配制文件的程序代码:
using  System;
using  System.Collections.Generic;
using  System.Collections;
using  System.Text;
using  System.Configuration;
using  Microsoft.Practices.ServiceLocation;
using  Microsoft.Practices.Unity;
using  Microsoft.Practices.Unity.Configuration;
using  Microsoft.Practices.Unity.ServiceLocatorAdapter;
using  UnityAdapter.Tests.Components;
using  Xunit;

namespace  UnityAdapter.Tests
{
    
///   <summary>
    
///  ServiceLocatorTestWithConfig
    
///   </summary>
    
///   <remarks> author PetterLiu  http://wintersun.cnblogs.com   </remarks>
     public   class  ServiceLocatorTestWithConfig
    {
        
protected   readonly  IServiceLocator locator;

        
public  ServiceLocatorTestWithConfig()
        {
            locator 
=  CreateServiceLocator();
        }

        
protected  IServiceLocator CreateServiceLocator()
        {
            IUnityContainer container 
=   new  UnityContainer();
            UnityConfigurationSection section 
=
                (UnityConfigurationSection)ConfigurationManager.GetSection(
" unity " );
            section.Containers.Default.Configure(container);                
            
return   new  UnityServiceLocator(container);
        }

        [Fact]
        
public   void  GetInstanceWithName()
        {
            ILogger instance 
=  locator.GetInstance < ILogger > ( " AdvancedLogger " );
            Assert.IsType(
typeof (AdvancedLogger), instance);
        }

        [Fact]
        
public   void  GetDefaultInstance()
        {
            ILogger instance 
=  locator.GetInstance < ILogger > ();
            Assert.IsType(
typeof (SimpleLogger), instance);
        }

        [Fact]
        
public   void  GetInstanceWithName2()
        {
            ILogger instance 
=  locator.GetInstance < ILogger > ( " SimpleLogger " );
            Assert.IsType(
typeof (SimpleLogger), instance);
        }

        [Fact]
        
public   void  GetAllInstances()
        {
            IEnumerable
< ILogger >  instances  =  locator.GetAllInstances < ILogger > ();
            IList
< ILogger >  list  =   new  List < ILogger > (instances);
            Assert.Equal(
2 , list.Count);
        }

        [Fact]
        
public   void  GetlAllInstance_ForUnknownType_ReturnEmptyEnumerable()
        {
            IEnumerable
< IDictionary >  instances  =  locator.GetAllInstances < IDictionary > ();
            IList
< IDictionary >  list  =   new  List < IDictionary > (instances);
            Assert.Equal(
0 , list.Count);
        }

        [Fact]
        
public   void  GenericOverload_GetAllInstances()
        {
            List
< ILogger >  genericLoggers  =   new  List < ILogger > (locator.GetAllInstances < ILogger > ());
            List
< object >  plainLoggers  =   new  List < object > (locator.GetAllInstances( typeof (ILogger)));
            Assert.Equal(genericLoggers.Count, plainLoggers.Count);
            
for  ( int  i  =   0 ; i  <  genericLoggers.Count; i ++ )
            {
                Assert.Equal(
                    genericLoggers[i].GetType(),
                    plainLoggers[i].GetType());
            }
        }
    }
}

配制文件:
config

相关引用:
Unity介绍

Unity Application Block (Unity)是一个轻量级的, 可扩展的依赖注入容器. 它有助于构建松耦合的应用程序和为开发者提供以下便利:

  • 简化对象的创建,特别在分层对象结构和依赖的情形下
  • 它支持需求的抽象化,这允许开发人员在运行时或在配置文件中指定依赖,简化横切关注点(crosscutting concerns)的管理
  • 它通过把组件配置推给容器来决定,增加了灵活性 
  • 服务定位能力; 这使客户端能够存储或缓存容器

xUnit介绍
NUnit的创造者Jim Newkirk公布了一个新的单元测试框架,叫做xUnit.net。这个以NUnit接班人自许的新框架打算消除NUnit的错误和缺点,并打算在框架中加入一些最佳实践和扩展能力。

xUnit.net:下一代单元测试框架?
http://www.infoq.com/cn/news/2007/09/xunit-net

xUnit.net 项目官方
http://www.codeplex.com/xunit/

你可能感兴趣的:(service)