zoukankan      html  css  js  c++  java
  • [转]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
    <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
      <!--alias 定義別名-->
      <alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" />
      <alias alias="MyClass" type="ConsoleApplication1.MyClass, ConsoleApplication1" />
      <!--引入下面的命名空間,可以省的輸入過多的內容-->
      <namespace name="ConsoleApplication1" />
      <assembly name="ConsoleApplication1" />
      
      <container >
        <register type="IClass" mapTo="MyClass" />
        <register type="ILogger" mapTo="FileLogger"></register>
        
        <!--註冊類+構造函數 默認數值是3-->
        <register type="InstallerBase" mapTo="BlogInstaller">
          <constructor>
            <param name="pubContext" type="IPubContext" />
            <param name="sum" type="System.Int32" value="3" />
          </constructor>
        </register>
    
        <!--<register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/>-->
        <register type="ISomeInterface[System.Int32]" mapTo="MyTypeImplementingSomeInterface[System.Int32]"/>
    
        
        <register type="ObjectWithOverloads" name="callFirstOverload">
          <method name="CallMe">
            <param name="param" type="int" value="17"/>
          </method>
        </register>
    
        <register type="ILogger" mapTo="MockLogger" name="validLogger" />
        <register type="ObjectUsingLogger" name="dependencyRegistered">
          <property name="Logger">
            <optional name="validLogger" />
          </property>
        </register>
        <!--數值-->
        <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>
      </container>
      
    </unity>

    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
    复制代码
       class BlogInstaller : InstallerBase
        {
            private IPubContext pubContext;
            private int sum;
            public BlogInstaller(IPubContext pubContext,int sum)
            {
                this.pubContext = pubContext;
            }
    
            #region InstallerBase 成員
    
            public void ShowInfo()
            {
                Console.WriteLine("FileLogger12InstallerBase");
            }
    
            #endregion
        }
    
        interface InstallerBase
        {
            void ShowInfo();
        }
    复制代码

    代碼調用如下:

    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
    复制代码
        public interface ISomeInterface<T>
        {
    
        }
    
        public class MyTypeImplementingSomeInterface<T> : ISomeInterface<T>
        {
    
        }
    复制代码

    代碼調用如下:

    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
    复制代码
        /// <summary>
        /// 執行方法
        /// </summary>
        class ObjectWithOverloads
        {
            public int FirstOverloadCalls;
            public int SecondOverloadCalls;
    
    
            public void CallMe(int param)
            {
                ++FirstOverloadCalls;
            }
    
            public void CallMe(string param)
            {
                ++SecondOverloadCalls;
            }
        }
    复制代码

    代碼調用:

        //執行方法
                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
    复制代码
       class ArrayDependencyObject
        {
            public ILogger[] Loggers { get; set; }
    
            public string[] Strings { get; set; }
        }
        class SpecialLogger : ILogger
        {
    
            #region ILogger 成員
    
            public void ShowInfo()
            {
                throw new NotImplementedException();
            }
    
            #endregion
        }
    复制代码

    代碼調用:

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

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

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

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

  • 相关阅读:
    笔记7-7
    输出九九乘法表
    eclipse配置Maven——菜鸟篇
    IOC和AOP使用扩展之AOP详解实现类
    --------Hibernate框架之双向多对多关系映射
    易买网----------有感
    有关于TreeSet的自我理解
    爱学习当当网----图片的切换,书栏的循环滚动
    有关于购物车买买买?剁手吧
    致童年,一生都无法忘记的技能
  • 原文地址:https://www.cnblogs.com/oneLight/p/2494469.html
Copyright © 2011-2022 走看看