在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 }
运行结果:
定义一个程序员接口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
|
请发表评论