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的值就能使用新的類了。
這樣,我們不需要刪除舊的代碼,就能追加新的功能,便於維護代碼。

