Unity是微軟推出的IOC框架,程序員
使用這個框架,能夠實現AOP面向切面編程,便於代碼的後期維護,此外,這套框架還自帶單例模式,能夠提升程序的運行效率。編程
下面是我本身的案例,以供往後參考:框架
使用VS2015的Nuget管理器下載Unity。spa
程序員接口類:.net
1 namespace UnityDemo 2 { 3 public interface IProgrammer 4 { 5 void Working(); 6 } 7 }
程序員類:code
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
<?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>
主程序代碼:blog
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的思想:utf-8
定義一個程序員接口IProgrammer,有3個實現這個接口的程序員類,分別是CSharp、VB、Java,
而後配置App.config文件,裏面首先定義一個配置節點(configSection),名稱爲Unity,引用的命名空間是微軟的Unity,
接着下面定義一個unity節點,裏面的容器集合(containers),集合裏面能夠有多個容器,這個Demo裏的只有一個容器,裏面包含了3個註冊節點(register),分別是CSharp,VB、Java,注意,裏節點中的name屬性用於在程序調用時選擇類的。
在主程序的代碼中,
一、有一個Unity的容器container;
二、註冊容器的方法RegisterContainer,做用是到App.config中讀取容器的信息,把接口和3個類的映射關係註冊到容器中;
三、主程序運行前,先註冊容器,而後經過容器的Resolve方法,實例化一個programmer類,原理大概是,咱們把類名傳入到容器中,容器會根據類名,找到App.config中對應的register映射關係,容器就會經過反射獲得相應的程序員類,返回這個類。
四、此時programmer類就實例化完成,能夠使用了。
使用了Unity,之後若是須要追加新的類,只須要實現IProgrammer接口,在配置文件追加映射關係,執行代碼中修改name的值就能使用新的類了。
這樣,咱們不須要刪除舊的代碼,就能追加新的功能,便於維護代碼。