zoukankan      html  css  js  c++  java
  • Unity又称Unity Application Block

    本文关注以下方面(环境为VS2012、.Net Framework 4.5以及Unity 3):

    • Ioc/DI简介;
    • Unity简单示例

    一、Ioc/DI简介

      IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详细的说明可参见大牛Martin Fowler的强文 http://martinfowler.com/articles/injection.html,借用Hollywood的名言:Don't call us, we'll call you,意即你呆着别动,到时我会找你。控制反转的核心是控制权的转移,从原有的应用程序转移到框架如IoC容器,从而实现模块间的解耦。

      Unity又称Unity Application Block,是微软P&P团队开发的一个轻量级、可扩展的依赖注入容器。它有助于构建松耦合的应用程序和为开发者提供以下便利:

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

      关于Unity的详细介绍可移步微软官网 http://msdn.microsoft.com/en-us/library/dn170416.aspx

        

    二、Unity简单示例

      以Log日志为例

      首先,简单定义日志接口

    复制代码
    namespace PCT.Unity.ConsoleAppSample
    {
        interface ILog
        {
            void Log(string message);
        }
    }
    复制代码

      控制台日志实现类

    复制代码
    namespace PCT.Unity.ConsoleAppSample
    {
        class ConsoleLog : ILog
        {
            public void Log(string message)
            {
                Console.WriteLine(message);
            }
        }
    }
    复制代码

    添加Unity引用

    在搜索框中输入Unity

    点击Install即可完成安装。

    注册(Register)和使用(Resolve)代码如下

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Practices.Unity;
    
    namespace PCT.Unity.ConsoleAppSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Register
                var container = new UnityContainer();
                container.RegisterType<ILog, ConsoleLog>();
    
                var logger = container.Resolve<ILog>();
                logger.Log("Hello, Unity Application Block");
    
                Console.ReadKey();
            }
        }
    }
    复制代码

    运行效果如下:

    三、Unity配置文件示例

      代码container.RegisterType<ILog, ConsoleLog>()改成container.LoadConfiguration()即可,当然要包含Microsoft.Practices.Unity.Configuration命名空间,完整的代码如下

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
    
    namespace PCT.Unity.ConsoleAppSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Register
                var container = new UnityContainer();
                //container.RegisterType<ILog, ConsoleLog>();
                container.LoadConfiguration();
    
                var logger = container.Resolve<ILog>();
                logger.Log("Hello, Unity Application Block");
    
                Console.ReadKey();
            }
        }
    }
    复制代码

    修改配置文件如下

    复制代码
    <?xml version="1.0"?>
    <configuration>
    
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
      </startup>
    
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
      </configSections>
    
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <assembly name="PCT.Unity.ConsoleAppSample" />
        <namespace name="PCT.Unity.ConsoleAppSample" />
        <container>
          <register type="ILog" mapTo="ConsoleLog" />
        </container>
      </unity>
    
    </configuration>
    复制代码

    运行,发现如下错误

    不解,Google之发现configSections节点应该放在第一个位置,其它节点无所谓顺序。

    复制代码
    <?xml version="1.0"?>
    <configuration>
      
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
      </configSections>
    
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <assembly name="PCT.Unity.ConsoleAppSample" />
        <namespace name="PCT.Unity.ConsoleAppSample" />
        <container>
          <register type="ILog" mapTo="ConsoleLog" />
        </container>
      </unity>
    
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
      </startup>
      
    </configuration>
    复制代码

    再次运行,一切正常

    转自:http://www.cnblogs.com/panchunting/p/Unity_Sample.html

  • 相关阅读:
    Jenkins调用selenium找不到webdriver:selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
    列表的基本操作
    jenkins集成发送测试报告的常见问题解决
    Chrome 浏览器前端调试技巧大揭秘
    搭建Redis三主三从集群
    Jenkins安装
    python中hasattr()、getattr()、setattr()函数的使用
    python单元测试之unittest框架
    python环境配置详细步骤
    Android:EditText 设置弹出数字输入法键盘
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/5682593.html
Copyright © 2011-2022 走看看