zoukankan      html  css  js  c++  java
  • C# Unity的使用

    Unity是微软推出的IOC框架,

    使用这个框架,可以实现AOP面向切面编程,便于代码的后期维护,此外,这套框架还自带单例模式,可以提高程序的运行效率。

    下面是我自己的案例,以供日后参考:

    使用VS2015的Nuget管理器下载Unity。

    程序员接口类:

    1 namespace UnityDemo
    2 {
    3     public interface IProgrammer
    4     {
    5         void Working();
    6     }
    7 }


    程序员类:

     1 using System;
     2 
     3 namespace UnityDemo
     4 {
     5     public class CSharp : IProgrammer
     6     {
     7         public void Working()
     8         {
     9             Console.WriteLine("programming C# ...");
    10         }
    11     }
    12 
    13     public class VB : IProgrammer
    14     {
    15         public void Working()
    16         {
    17             Console.WriteLine("programming VB ...");
    18         }
    19     }
    20 
    21     public class Java : IProgrammer
    22     {
    23         public void Working()
    24         {
    25             Console.WriteLine("programming Java ...");
    26         }
    27     }
    28 }

    App.config配置文件:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <!--<startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
      </startup>-->
    
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
      </configSections>
      <unity>
        <containers>
          <container name="Programmer">
            <register type="UnityDemo.IProgrammer,UnityDemo"  mapTo="UnityDemo.CSharp,UnityDemo" name="CSharp"></register>
            <register type="UnityDemo.IProgrammer,UnityDemo"  mapTo="UnityDemo.VB,UnityDemo" name="VB"></register>
            <register type="UnityDemo.IProgrammer,UnityDemo"  mapTo="UnityDemo.Java,UnityDemo" name="Java"></register>
          </container>
        </containers>
      </unity>
    </configuration>


    主程序代码:

     1 using Microsoft.Practices.Unity;
     2 using Microsoft.Practices.Unity.Configuration;
     3 using System;
     4 using System.Configuration;
     5 
     6 namespace UnityDemo
     7 {
     8     class Program
     9     {
    10         private static IUnityContainer container = null;
    11 
    12         static void Main(string[] args)
    13         {
    14             RegisterContainer();
    15 
    16             var programmer = container.Resolve<IProgrammer>("CSharp");
    17             //var programmer = container.Resolve<IProgrammer>("VB");
    18             programmer.Working();            
    19 
    20             Console.ReadKey();
    21         }
    22 
    23         private static void RegisterContainer()
    24         {
    25             container = new UnityContainer();
    26             UnityConfigurationSection config =(UnityConfigurationSection) ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
    27             config.Configure(container, "Programmer");
    28         }
    29     }
    30 }

    运行结果:


    这个Demo的思想:

    定义一个程序员接口IProgrammer,有3个实现这个接口的程序员类,分别是CSharp、VB、Java,

    然后配置App.config文件,里面首先定义一个配置节点(configSection),名称为Unity,引用的命名空间是微软的Unity,

    接着下面定义一个unity节点,里面的容器集合(containers),集合里面可以有多个容器,这个Demo里的只有一个容器,里面包含了3个注册节点(register),分别是CSharp,VB、Java,注意,里节点中的name属性用于在程序调用时选择类的。

    在主程序的代码中,

    1、有一个Unity的容器container;

    2、注册容器的方法RegisterContainer,作用是到App.config中读取容器的信息,把接口和3个类的映射关系注册到容器中;

    3、主程序运行前,先注册容器,然后通过容器的Resolve方法,实例化一个programmer类,原理大概是,我们把类名传入到容器中,容器会根据类名,找到App.config中对应的register映射关系,容器就会通过反射得到相应的程序员类,返回这个类。

    4、此时programmer类就实例化完成,可以使用了。

    使用了Unity,以后如果需要追加新的类,只需要实现IProgrammer接口,在配置文件追加映射关系,执行代码中修改name的值就能使用新的类了。

    这样,我们不需要删除旧的代码,就能追加新的功能,便于维护代码。

    源码下载:http://download.csdn.net/detail/cycong108/9734502

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/chenyucong/p/6272600.html
Copyright © 2011-2022 走看看