如何创建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. 纯CSS实现小圆点和三角形图案

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. vncserverpassword改动

    前几天去客户现场,客户说有測试库.Linux下的,帮忙给新建一个数据库,我这么热心的人.是吧 那就開始吧. 一般使用vnc搞图形安装.熟练的打开vnc.输入password,报错!!我愣了几秒,忽然反 ...

  3. Android组件系列----ContentProvider内容提供者【1】

    [正文] 一.ContentProvider简单介绍: ContentProvider内容提供者(四大组件之中的一个)主要用于在不同的应用程序之间实现数据共享的功能. ContentProvider能 ...

  4. less06 引入(importing)

    main.less @wp:960px; .colorsss{ color: darkgreen; } index.css .color{ color: #ff6600; } style.less / ...

  5. 智课雅思短语---五、 in contrast / on the contrary

    智课雅思短语---五. in contrast / on the contrary 一.总结 一句话总结:相反 in contrast / on the contrary. 1.replace/ su ...

  6. lightoj--1214--Large Division(大数取余)

    Large Division Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit ...

  7. OLTP 与 OLAP

    OLTP:On-Line Transaction Processing(联机事务处理过程).也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出 ...

  8. strlen() 和 sizeof() 的区别

    1.strlen() 时函数,他在程序运行时才能计算.它的参数类型要求时 char *,且必须是以'/0'结尾.数组在传入时已经退化为指针.它的作用是返回数组中字符串的长度. 2.sizeof()时运 ...

  9. Spring:dispatchservlet

    DispatcherServlet 是 Spring MVC 中负责请求调度的核心引擎,所有的请求将由此 Servlet 根据配置分发至各个逻辑处理单元.其内部同时也维护了一个ApplicationC ...

  10. 2019 前端面试题汇总(主要为 Vue)

    原文链接:点我 由于我的技术栈主要为Vue,所以大部分题目都是Vue开发相关的. 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. Model:代表数据 ...