码迷,mamicode.com
首页 > 编程语言 > 详细

Unity容器实现自动注册

时间:2019-02-27 17:40:23      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:write   情况下   机制   color   str   LLC   搜索   assembly   使用   

如何创建Unity容器?

首先NuGet搜索Unity, 该示例中使用的版本为4.0.1

技术图片

新建控制台程序

示例中使用常规操作, 创建一个IPay接口, 分别有两个实现类: ApplePay、HuaweiPay, 它们分别实现了IPay接口, 如下所示:

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接口的, 否则默认为最后一个注册实现为准。

调用方式, 则如下所示:

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

 

Unity容器实现自动注册

标签:write   情况下   机制   color   str   LLC   搜索   assembly   使用   

原文地址:https://www.cnblogs.com/zh7791/p/10445166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!