Unity Container中的幾種注冊方式與示例


1.實例注冊

最簡單的注冊方式就是實例注冊,Unity 容器負責維護對一個類型的單例引用,比如:

有如下的實際類型:

namespace ConsoleSample
{
    public class SampleClass
    {
        public int ReferenceCount { get; set; }

        public void Increase()
        {
            this.ReferenceCount++;
        }
    }
}

使用UnityContainer的RegisterInstance方法對這個類型進行實例注冊:

var container = new UnityContainer();
SampleClass sampleClass = new SampleClass();
container.RegisterInstance(sampleClass);

而后,我們可以使用UnityContainer的Resolve方法對這個類型進行解析和調用:

SampleClass resolvedSampleClass1 = (SampleClass)container.Resolve(typeof(SampleClass));
resolvedSampleClass1.Increase();
Console.WriteLine(resolvedSampleClass1.ReferenceCount);
SampleClass resolvedSampleClass2 = (SampleClass)container.Resolve(typeof(SampleClass));
resolvedSampleClass2.Increase();
Console.WriteLine(resolvedSampleClass2.ReferenceCount);

查看調用的結果,可以發現這里解析並調用的實同一個類的實例:

QQ截圖20131208221557

2.簡單類型注冊

更常見的類型注冊是映射借口與實際類型,有如下接口與實現接口的類型:

接口定義

namespace ConsoleSample
{
    public interface IFuckUp
    {
        int IncreaseFlag();
    }
}

類型定義

namespace ConsoleSample
{
    public class FuckUp
    {
        private int flag = 0;

        public int IncreaseFlag()
        {
            flag++;
            return flag;
        }
    }
}

可以使用RegisterType<>方法對這個接口和實現類型進行映射:

var container = new UnityContainer();
container.RegisterType<IFuckUp, FuckUp>();

 

而后使用Resolve<>方法對類型進行解析:

 
IFuckUp fuckUp1 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp1.IncreaseFlag());
IFuckUp fuckUp2 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp2.IncreaseFlag());
通過調用結果可以看出,此次解析兩個類型時為創建的兩個新的對象,我們使用了在1節中不同的方式對類型進行解析 1

看來又是一篇簡單的筆記,快十一點要去鍛煉身體了,下一篇寫構造函數注入


免責聲明!

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



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