最簡單的註冊方式就是實例註冊,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
更常見的類型註冊是映射藉口與實際類型,有以下接口與實現接口的類型: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節中不一樣的方式對類型進行解析
看來又是一篇簡單的筆記,快十一點要去鍛鍊身體了,下一篇寫構造函數注入