• 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/

  • 相关阅读:
    Oracle 服务命名(别名)的配置及原理,plsql连接用
    AdHoc发布时出现重复Provisioning Profile的解决方案
    xcode5时代如何设置Architectures和Valid Architectures
    C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
    DataTable的数据批量写入数据库
    高中生活--第7篇–我为什么不交作业
    ITFriend网站内测公测感悟
    网站推广第一周总结和反思
    第一次当面试官
    技术人才的出路在哪里,5种选择和2种思路
  • 原文地址:https://www.cnblogs.com/wintersun/p/1319928.html
Copyright © 2020-2023  润新知