好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# Unity使用

C# Unity使用

1.引用對象

2.在app.config中進行配置

<?xml version= "  1.0  "  encoding= "  utf-8  "  ?>
<configuration>
  <configSections>
    <section name= "  unity  "  
             type = "  Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,  
                               Microsoft.Practices.Unity.Configuration "   /> 
  </configSections>
  <unity  configSource= "  unity.config  "  />
    
   
</configuration>

這裡unity的配置是在unity.config中進行配置的。

代碼如下:

View Code

3.關於配置的說明

  <!--alias 定義別名-->
  <alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" />

  <!--引入下面的命名空間,可以省的輸入過多的內容-->
  <namespace name="ConsoleApplication1" />

2個操作是為了使輸入簡單。

4.實例說明

4.1 定義UnityContainer,并初始化用配置文件中的數據

             var  container =  new   UnityContainer();

            UnityConfigurationSection configuration  = (UnityConfigurationSection)ConfigurationManager.GetSection( "  unity  "  );
         
            configuration.Configure(container); 

4.2 註冊簡單接口類

 <register type="IClass" mapTo="MyClass" />

代碼如下:

     interface   IClass
    {
          void   ShowInfo();
    } 

 class   MyClass:IClass
    {
        [Dependency]  //  實例化對象 
         public   virtual  IPubContext Context {  set ;  get  ; }
          #region  IClass 成員

         public   void   ShowInfo()
        {
            Console.WriteLine(  "  MyClass12  "  );
        }

          #endregion  
    } 

代碼中調用:

 IClass classInfo = container.Resolve<IClass> ();
classInfo.ShowInfo(); 

4.3 如果對象中有屬性,需要初始化,可以在屬性上加 [Dependency] // 實例化對象 ,那麼在取得對象的時候,這個屬性頁初始化了。

如上例中的IPubContext 屬性。

    class IPubContext
    {
        public string Name { set; get; }
    }

4.4 帶構造函數的實例配置

    <register type= "  InstallerBase  "  mapTo= "  BlogInstaller  " >
      <constructor>
        <param name= "  pubContext  "  type= "  IPubContext  "  />
        <param name= "  sum  "  type= "  System.Int32  "  value= "  3  "  />
      </constructor>
    </register>

定義類型如下:

View Code

代碼調用如下:

 InstallerBase classInstallerBase = container.Resolve<InstallerBase>();
 classInstallerBase.ShowInfo();

其中,構造函數是:

        public BlogInstaller(IPubContext pubContext,int sum)
        {
            this.pubContext = pubContext;
        }

與配置文件中的參數是一一對應的。並且配置文件中對與sum這個屬性,有默認數值是3.

4.5 泛型類型配置

<register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/>

代碼如下定義:

View Code

代碼調用如下:

ISomeInterface<int> some = container.Resolve<ISomeInterface<int>>();

4.6 配置方法的執行

   <register type= "  ObjectWithOverloads  "  name= "  callFirstOverload  " >
      <method name= "  CallMe  " >
        <param name= "  param  "  type= "  int  "  value= "  17  " />
      </method>
    </register>

定義類 callFirstOverload ,並且定義方法 CallMe :

View Code

代碼調用:

     //  執行方法 
             var  result = container.Resolve<ObjectWithOverloads>( "  callFirstOverload  "  );
            Console.WriteLine(result.FirstOverloadCalls); 

4.7 數組配置

   <!--數組-->
    <register type= "  ILogger  "  name= "  main  "  mapTo= "  MockLogger  "  />
    <register type= "  ILogger  "  name= "  another  "  mapTo= "  MockLogger  "  />
    <register type= "  ILogger  "  name= "  special  "  mapTo= "  SpecialLogger  "  />
    <register type= "  ArrayDependencyObject  "  name= "  specificElements  " >
      <property name= "  Loggers  " >
        <array>
          <dependency name= "  main  "  />
          <dependency name= "  another  "  />
        </array>
      </property>
    </register>

定義類:

View Code

代碼調用:

   var result2 = container.Resolve<ArrayDependencyObject>("specificElements");

可以看到result2執行完成后,會得到 result2.Loggers數組,這個數組包括2個對象,一個是main

另一個是another,都是ILogger對象。

4.8 LifetimeManager的使用。是定義一個生命週期。這裡就不說了。在我的MVC中,有使用。

 

分类:  C#

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C# Unity使用的详细内容...

  阅读:38次

上一篇: 二叉查找树(三)

下一篇:CS 系统框架二