示例一,正常使用:

相关定义:

public interface ICar
{
int Run();
} public class BMW : ICar
{
private int _miles = ; public int Run()
{
return ++_miles;
}
} public class Ford : ICar
{
private int _miles = ;
public int Run()
{
return ++_miles;
}
} public class Audi : ICar
{
private int _miles = ; public int Run()
{
return ++_miles;
} }
public class Driver
{
private ICar _car = null; public Driver(ICar car)
{
_car = car;
} public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}

使用:

var container = new UnityContainer();
container.RegisterType<ICar, BMW>(); var driver = container.Resolve<Driver>();
driver.RunCar();

我们使用Resolve来解析我们想要的调用对象,在这里是Driver。

示例二,多个注入:

相关定义的代码不变,将使用部分的代码改为:

var container = new UnityContainer();
container.RegisterType<ICar, BMW>();
container.RegisterType<ICar, Audi>("LuxuryCar"); // Register Driver type
container.RegisterType<Driver>("LuxuryCarDriver",
new InjectionConstructor(container.Resolve<ICar>("LuxuryCar"))); Driver driver1 = container.Resolve<Driver>();// injects BMW
driver1.RunCar(); Driver driver2 = container.Resolve<Driver>("LuxuryCarDriver");// injects Audi
driver2.RunCar();

示例三,多个构造函数参数:

相关定义:

public interface ICarKey { 

}

public class BMWKey : ICarKey
{ } public class AudiKey : ICarKey
{ } public class FordKey : ICarKey
{ } public class Driver
{
private ICar _car = null;
private ICarKey _key = null; public Driver(ICar car, ICarKey key)
{
_car = car;
_key = key;
} public void RunCar()
{
Console.WriteLine("Running {0} with {1} - {2} mile ", _car.GetType().Name , _key.GetType().Name, _car.Run());
}
}

相关使用:

var container = new UnityContainer();

container.RegisterType<ICar, Audi>();
container.RegisterType<ICarKey, AudiKey>(); var driver = container.Resolve<Driver>();
driver.RunCar();

示例四,多个构造函数:

相关定义不变,将使用部分代码改为:

public class Driver
{
private ICar _car = null; [InjectionConstructor]
public Driver(ICar car)
{
_car = car;
} public Driver(string name)
{
} public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}
container.RegisterType<Driver>(new InjectionConstructor(new Ford()));

//or 

container.RegisterType<ICar, Ford>();
container.RegisterType<Driver>(new InjectionConstructor(container.Resolve<ICar>()));

示例五,基类型作为构造函数参数:

相关定义:

public class Driver
{
private ICar _car = null;
private string _name = string.Empty; public Driver(ICar car, string driverName)
{
_car = car;
_name = driverName;
} public void RunCar()
{
Console.WriteLine("{0} is running {1} - {2} mile ",
_name, _car.GetType().Name, _car.Run());
}
}

相关使用:

var container = new UnityContainer();

container.RegisterType<Driver>(new InjectionConstructor(new object[] { new Audi(), "Steve" }));

var driver = container.Resolve<Driver>(); // Injects Audi and Steve
driver.RunCar();

完整请参考:

http://www.tutorialsteacher.com/ioc/constructor-injection-using-unity-container

Unity IOC容器的构造函数使用笔记(不能错过的Unity示例)的更多相关文章

  1. 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...

  2. 总结Unity IOC容器通过配置实现类型映射的几种基本使用方法

    网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下: unityContainer = new Un ...

  3. Unity IOC容器通过配置实现类型映射的几种基本使用方法

    网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下 unityContainer = new Uni ...

  4. Unity IOC容器的简单应用(转)

    转自:http://blog.csdn.net/wanzhuan2010/article/details/7763280 Unity是Unity是微软patterns& practices组用 ...

  5. Spring的IoC容器

    Spring是一个轻量级的Java开发框架,其提供的两大基础功能为IoC和AOP,其中IoC为依赖反转(Inversion of Control).IOC容器的基本理念就是"为别人服务&qu ...

  6. [IoC容器Unity] :Unity预览

    1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...

  7. IOC容器Unity的使用及独立配置文件Unity.Config

    [本段摘录自:IOC容器Unity 使用http://blog.csdn.net/gdjlc/article/details/8695266] 面向接口实现有很多好处,可以提供不同灵活的子类实现,增加 ...

  8. 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)

    很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...

  9. [IoC容器Unity]第四回:使用范例

    1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...

随机推荐

  1. PYMySQL的注册功能的实现

    import pymysql conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root& ...

  2. LeetCode(88):合并两个有序数组

    Easy! 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素 ...

  3. java基础概念整理(三)

    1.对象的上转型 对象的上转型不能调用和使用子类对象新增的成员和变量,不能调用子类新增的方法. 上转型对象可以访问子类继承或者隐藏的成员变量,也可以调用子类继承或者子类重写的实例方法.因此如果子类重写 ...

  4. Linux 编程笔记(四)

    一.用户和用户组管理 添加新的用户账户使用useradd 格式useradd   选项  用户名 1.创建一个用户tian 其中 -d -m参数用来为登陆,登录名产生一个主目录 /usr/tian(其 ...

  5. Centos7上配置网络和本地yum方法

    配置网络yum源 前提:1.这个系统能上网 2.vim /etc/resolv.conf nameserver 8.8.8.8 nameserver 114.114.114.114 操作如下: 1.m ...

  6. 步步为营-74-Request,Response和server的其他成员

    Request 1 Request.UrlReferrer 获取请求的来源 2 Request.UserHostAddress 获取访问者的IP地址 3 Request.Cookies 获取浏览器发送 ...

  7. 无废话-API-01

    说明 我的开发环境:VS2013 浏览器:谷歌浏览器(Google Chrome) 1创建项目 1.1添加一个 应用程序"ASP.NET MVC 4 Web 应用程序"  1.2选 ...

  8. fetch请求

    get请求 return fetch('https://xxx.xxx.com/xxx.json') .then(response => response.json()) .then(respo ...

  9. 原生开发小程序 和 wepy 、 mpvue, Taro 对比

    https://blog.csdn.net/yang450712123/article/details/79623518 mpvue https://www.cnblogs.com/bgwhite/p ...

  10. 【Android】application标签说明

    <application> <application android:allowClearUserData=["true" | "false" ...