如何建立Unity容器?app
首先NuGet搜索Unity, 該示例中使用的版本爲4.0.1spa
新建控制檯程序code
示例中使用常規操做, 建立一個IPay接口, 分別有兩個實現類: ApplePay、HuaweiPay, 它們分別實現了IPay接口, 以下所示:blog
public interface IPay { void Send(); }
public class ApplePay : IPay { public void Send() { Console.WriteLine("ApplePay!"); } }
public class HuaWeiPay : IPay { public void Send() { Console.WriteLine("HuaWeiPay!"); } }
建立Unity容器, 按照常規的註冊方式, 以下:接口
IUnityContainer container = new UnityContainer(); container.RegisterType<IPay, ApplePay>("ApplePay"); container.RegisterType<IPay, HuaWeiPay>("HuaWeiPay");
RegisterType方法提供了手動參數, 主要用於區分IPay接口的, 不然默認爲最後一個註冊實現爲準。it
調用方式, 則以下所示:class
container.Resolve<IPay>("ApplePay").Send(); container.Resolve<IPay>("HuaWeiPay").Send();
實現自動註冊容器
該方法, 則好處不用於, 每次新建新的接口關係時, 必須手動去進行 RegisterType, 以下方法則實現自動註冊機制:搜索
container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromAllInterfacesInSameAssembly,
WithName.TypeName, WithLifetime.PerResolve);
RegisterTypes 的第三個參數爲 TypeName: 該參數默認爲實現接口的類名, 若是默認使用Default, 那麼在一個接口有多個實現的狀況下則沒法實現註冊。程序
注: 上例中, IPat 接口 分別被 ApplePay、HuaweiPay 所實現, 實際的應用中, 也可能會出現這種狀況, 不然, 能夠忽略。
比較, 完整示例代碼,以下所示:
IUnityContainer container = new UnityContainer(); container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromAllInterfacesInSameAssembly, WithName.Default, WithLifetime.PerResolve); //container.RegisterType<IPay, ApplePay>("ApplePay"); //container.RegisterType<IPay, HuaWeiPay>("HuaWeiPay"); container.Resolve<IPay>("ApplePay").Send(); container.Resolve<IPay>("HuaWeiPay").Send(); Console.ReadKey();