• 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

  • 相关阅读:
    arcmap发布服务报错:“Faild to publish service”
    GIS优秀博客以及网址收藏,持续更新
    AE实现拖拽
    【ArcGIS for Server】制作并发布GP服务--缓冲分析为例
    ArcGIS API for JavaScript经典例子
    ArcGIS API for JavaScript
    Console ArcEngine 许可绑定
    FK JavaScript:ArcGIS JavaScript类库加载不成功而导致的程序异常
    FK JavaScript之:ArcGIS JavaScript添加Graphic,地图界面却不显示
    ASP.NET发布后,功能不响应
  • 原文地址:https://www.cnblogs.com/chenyucong/p/6272600.html
Copyright © 2020-2023  润新知