zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/wintersun/p/1319928.html
Copyright © 2011-2022 走看看