Unity+單例模式的依賴注入

來源:互聯網
上載者:User

Unity這個微軟自家出的依賴注入,相信很多人都應該聽過了,不過貌似現在很少中文的教程,唉,本人E文不好。。只學到點皮毛。

而公司的網站也是採用Unity來做依賴注入的,在這裡就分享一個小Demo出來,希望大家能對Unity有個瞭解。雖然Spring.Net的也挺好用的,

不過本人有嚴重的微軟癖,所以還是用微軟的。

1.首先當然是先下載Unity,找不到的可以上google搜尋。

2.為Web項目添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll兩個引用。

3.在web.config檔案中的configSections中添加如下節點

<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.1.0.0,                  Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

4.在web.config檔案中的configuration中添加如下節點

    <!--具體的Untiy配置項-->
    <unity>
        <containers>
            <container name="Service">
                <types>
                    <type type="TestUnity.ITest,TestUnity" mapTo="TestUnity.Test,TestUnity"/>
                </types>
            </container>
            <container name="Repository">
                <types>
                    <type type="TestUnity.IRepo,TestUnity" mapTo="TestUnity.Repo,TestUnity"/>
                </types>
            </container>
        </containers>
    </unity>
    <!--結束untiy-->

 container中的name是隨便起,type中的type是對應的介面,要把命名空間也加上去,mapTo是介面對應的實作類別

之後添加一個類UnityContext,如下:

    public class UnityContext
    {
        public static UnityContext _instance;

        private UnityContainer _container;

        public static UnityContext Instance
        {
            get
            {
                if (_instance == null) _instance = new UnityContext();
                return _instance;
            }
        }

        /// <summary>
        /// 建構函式
        /// </summary>
        public UnityContext()
        {
            _container = new UnityContainer();
            UnityConfigurationSection setion = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            setion.Containers["Service"].Configure(_container);
            setion.Containers["Repository"].Configure(_container);
        }

        public T Load<T>()
        {
            return _container.Resolve<T>();
        }
    }

 這是一個簡單的單例模式的管理Unity的類。。。寫得有點爛。。。其中"Service"和"Repository"就是對應設定檔中的container的name屬性。

public T Load<T>()方法是返回指定類型介面的實現對象。

 調用的話,如下:

            ITest test = UnityContext.Instance.Load<ITest>();
            IRepo repo = UnityContext.Instance.Load<IRepo>();
            string hell = test.SayHello();
            string hi = repo.SayHi();

 其中ITest,Test,IRepo,Repo為介面與對應的實作類別,都是只有簡單返回一個"Hello"或者"Hi"的方法。只是為了測試。

這樣的話,基本上就完成了。。至於好處嘛,其實我不太清楚,可能是降低耦合吧。。還有很多不懂的地方。寫得很爛,只是希望有個啟發各位的效果。有什麼不足和不對的地方希望各位多多指教。

下面是我用的:

1.Asp.net MVC架構

2.LinQ to SQL架構

3.Unity1.1


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.