程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Unity V3的使用:為我的.NET項目從簡單三層架構轉到IOC做准備

Unity V3的使用:為我的.NET項目從簡單三層架構轉到IOC做准備

編輯:關於.NET

【Unity簡介】在.NET中是一種非常 流行的IoC框架,最新版本為Unity v3。

【環境】VS2012、.NET Framework 4.5、Unity v3。

【安裝Unity v3】在你的項目中(無則新建Demo),如下圖所示,

在彈出的窗口搜索“Unity”,

安裝完之後可以管理解決方案中的項目是否使用Unity,如下圖勾選或取消勾選即可。

當然也可以直接在官網下載然後引用,這也是之前常用的方式。

【Coding】我的代碼包含一個接 口(IRegionFormat)三個類(DefaultRegionFormat、
DayMonthYearRegionFormat、 MonthDayYearRegionFormat),還有一個包含Main方法的類Program。

public interface 

IRegionFormat
    {
        string FormatName { get; }
    
        string GetShortTimeString(DateTime time);
    }
    
    public class DefaultRegionFormat : IRegionFormat
    {
        public string FormatName
        {
            get { return "默認時間格式"; }
        }
    
        public string GetShortTimeString(DateTime time)
        {
            return time.ToString("yyyy-MM-dd");
        }
    }
    
    public class DayMonthYearRegionFormat : IRegionFormat
    {
        public string FormatName
        {
            get { return "日月年格式"; }
        }
    
        public string GetShortTimeString(DateTime time)
        {
            return time.ToString("dd/MM/yyyy");
        }
    }
    
    public class MonthDayYearRegionFormat : IRegionFormat
    {
        public MonthDayYearRegionFormat(string s)
        {
            Console.WriteLine("構造函數的參數:{0}", s);
        }
    
        public string FormatName
        {
            get { return "月日年格式"; }
        }
    
        public string GetShortTimeString(DateTime time)
        {
            return time.ToString("MM/dd/yyyy");
        }
    }
    
一個接口三個類
static void Main(string[] args)
        {
            //NoConfigUnity();
            //ConfigUnity();
            ParameterUnity();
            Console.Read();
        }
    
        /// <summary>
        /// 全編碼方式注入
        /// </summary>
        static void NoConfigUnity()
        {
            IUnityContainer container = GetRegisterContainer();
            IRegionFormat format1 = container.Resolve<IRegionFormat>();
            WriteFormat(format1);
        }
    
        /// <summary>
        /// 編碼方式進行注入,此種方式無需在配置文件進行配置
        /// </summary>
        static IUnityContainer GetRegisterContainer()
        {
            IUnityContainer container = new UnityContainer();
            container.RegisterType<IRegionFormat, DefaultRegionFormat>();
            //container.RegisterType<IRegionFormat, DayMonthYearRegionFormat>();  
            //同一個接口注冊兩次,將以最後一次注冊為准
            return container;
        }
    
        /// <summary>
        /// 通過配置文件進行注入
        /// </summary>
        static void ConfigUnity()
        {
            IUnityContainer container = new UnityContainer();
            UnityConfigurationSection section = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) 
                as UnityConfigurationSection;
            //section.Configure(container, "defaultContainer");
            section.Configure(container, "DayMonthYearContainer");
            WriteFormat(container.Resolve<IRegionFormat>());
        }
    
        /// <summary>
        /// 構造方法含參數的注入
        /// </summary>
        static void ParameterUnity()
        {
            IUnityContainer container = new UnityContainer();
            UnityConfigurationSection section = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)
                as UnityConfigurationSection;            
            section.Configure(container, "MonthDayYearContainer");  //構造函數包含非注入類型參數
            container.RegisterInstance(typeof(string), "string類型注入"); //注冊對象,以便於對構造函數調用的參數初始化指定值
            WriteFormat(container.Resolve<IRegionFormat>());
        }
    
        static void WriteFormat(IRegionFormat format)
        {
            if (format != null)
            {
                Console.WriteLine("格式名稱:{0};當前時間:{1}"
                    , format.FormatName, format.GetShortTimeString(DateTime.Now));
            }
        }
    
包含Main方法的類Program

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
  </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <unity>
    <containers>
      <container name="defaultContainer">
        <register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.DefaultRegionFormat,UnityDemo"></register>
      </container>
      <container name="DayMonthYearContainer">
        <register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.DayMonthYearRegionFormat,UnityDemo"></register>
      </container>
      <container name="MonthDayYearContainer">
        <register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.MonthDayYearRegionFormat,UnityDemo"></register>
      </container>
    </containers>
  </unity>
</configuration>
    
配置文件app.config

代碼有注釋,就不羅嗦拉。
【值得注意的是】 1. 注入的接口對象所屬 的類中包含構造函數,且構造函數包含未進行注入的參數類型(如string,如果非要問還有哪些屬於,我的回 答是我也不知道,但是只有object類型作為構造函數參數運行時是不報錯的),則要進行“RegisterInstance ”,如Program類中的ParameterUnity方法所示。

2. 配置文件是XML格式,切記區分大小寫。

3.Unity 3 幫助文檔:http://msdn.microsoft.com/en-us/library/dn170416.aspx

complex 地址: http://unity.codeplex.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved