• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#Unity的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#开源汇总发布时间:2022-07-13
下一篇:
C#个人笔记发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap