如何创建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容器实现自动注册的更多相关文章

  1. Unity2.0容器自动注册机制

    现如今可能每个人都会在项目中使用着某种 IoC 容器,并且我们的意识中已经形成一些固定的使用模式,有时会很难想象如果没有 IoC 容器工作该怎么进展. IoC 容器通过某种特定设计的配置,用于在运行时 ...

  2. 【中英对照】【EntLib6】【Unity】实验1:使用一个Unity容器

    Lab 1: Using a Unity Container 实验1:使用一个Unity容器 Estimated time to complete this lab: 15 minutes 估计完成时 ...

  3. 微软IOC容器Unity简单代码示例3-基于约定的自动注册机制

    @(编程) [TOC] Unity在3.0之后,支持基于约定的自动注册机制Registration By Convention,本文简单介绍如何配置. 1. 通过Nuget下载Unity 版本号如下: ...

  4. Unity3.0基于约定的自动注册机制

    前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...

  5. c#中的Unity容器

    DIP是依赖倒置原则:一种软件架构设计的原则(抽象概念).依赖于抽象不依赖于细节 IOC即为控制反转(Inversion of Control):传统开发,上端依赖(调用/指定)下端对象,会有依赖,把 ...

  6. 【转载】C#中可使用Unity容器实现属性注入

    简介 Unity :Unity是微软团队开发的一个轻量级,可扩展的依赖注入容器,为松散耦合应用程序提供了很好的解决方案,支持构造器注入,属性注入,方法注入. 控制反转:(Inversion of Co ...

  7. My.Ioc 代码示例——实现自动注册/解析

    在很多 Ioc 容器中,当使用者向容器请求实现了某个契约类型 (Contract Type) 的服务时 (调用类似如下方法 container.Resolve(Type contractType)), ...

  8. Spring 自动装配及自动注册的相关配置

    Spring支持好几种自动装配(Autowiring)的方式,以及自动扫描并注册Bean的配置(在beans.xml中配置). 下文我们进行一个小结. 1. <context: annotati ...

  9. Ocelot + Consul + Registrator 基于Docker 实现服务发现、服务自动注册

    目录 1. Consul集群搭建 1.1 F&Q Consul官方推荐的host网络模式运行 2. Registrator服务注册工具 2.1 F&Q Registrator悬挂服务 ...

随机推荐

  1. iOS:界面上下空出黑条

    启动图没有加入完整造成

  2. c#程序中使用&quot;like“查询access数据库查询为空的问题

    今天,在开发的过程中发现了一个特别奇怪的问题:access中like查询时候.在Access数据库中运行,发现能够查询出结果.这是在数据库上运行.select * from KPProj where ...

  3. 英语影视台词---五、And Then There Were None

    英语影视台词---五.And Then There Were None 一.总结 一句话总结:求阿加莎·克里斯蒂小说<无人生还>的英文版<And Then There Were No ...

  4. centos7 阿里云yum源更换

    个人比较喜欢阿里云yum源,同时使用centos7 首先 cd /etc/yum.repos.d/ wget -O /etc/yum.repos.d/CentOS-Base.repo http://m ...

  5. git ---- 产生冲突的场景 和解决办法

    1.git冲突的场景 情景一:多个分支代码合并到一个分支时: 情景二:多个分支向同一个远端分支推送代码时: 实际上,push操作即是将本地代码merge到远端库分支上. 关于push和pull其实就分 ...

  6. POJ 3145 线段树 分块?+暴力

    思路: 线段树 (分类讨论) 此题数据很水 数据很水 数据很水 但是卡个暴力还是没问题的-- //By SiriusRen #include <cstdio> #include <c ...

  7. WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)

    之前啊,我们提及到,对于update和delete,若不带where条件,则对所有记录都有效. 一.WHERE条件表达式 (1)对记录进行过滤,如果没有指定WHERE子句,则显示所有记录. (2)在W ...

  8. C语言基础-第一章

    1.常量 直接常量: int mm=100; float nn=100.01; 字符常量:   编译指令,#define 常量名 常量值   (预处理命令,预处理命令都#开头.成为宏命令)  关键字, ...

  9. 使用jemdoc制作个人主页

    jemdoc官网说明: http://jemdoc.jaboc.net/index.html 作者的个人主页:https://jemnz.com/ 将下载的jemdoc.py文件和需要转化的xxx.j ...

  10. 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引

    先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...