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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM