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);
查看調用的結果,可以發現這里解析並調用的實同一個類的實例:
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節中不同的方式對類型進行解析

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