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

1.實例註冊

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

有以下的實際類型:html

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方法對這個類型進行解析和調用:this

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);

查看調用的結果,能夠發現這裏解析並調用的實同一個類的實例:spa

QQ截圖20131208221557

2.簡單類型註冊

更常見的類型註冊是映射藉口與實際類型,有以下接口與實現接口的類型:3d

接口定義code

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

類型定義htm

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<>方法對類型進行解析:blog

 
IFuckUp fuckUp1 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp1.IncreaseFlag());
IFuckUp fuckUp2 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp2.IncreaseFlag());
經過調用結果能夠看出,這次解析兩個類型時爲建立的兩個新的對象,咱們使用了在1節中不一樣的方式對類型進行解析 1

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

相關文章
相關標籤/搜索