Unity IOC容器的构造函数使用笔记(不能错过的Unity示例)
示例一,正常使用:
相关定义:
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示例)的更多相关文章
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- 总结Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下: unityContainer = new Un ...
- Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下 unityContainer = new Uni ...
- Unity IOC容器的简单应用(转)
转自:http://blog.csdn.net/wanzhuan2010/article/details/7763280 Unity是Unity是微软patterns& practices组用 ...
- Spring的IoC容器
Spring是一个轻量级的Java开发框架,其提供的两大基础功能为IoC和AOP,其中IoC为依赖反转(Inversion of Control).IOC容器的基本理念就是"为别人服务&qu ...
- [IoC容器Unity] :Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
- IOC容器Unity的使用及独立配置文件Unity.Config
[本段摘录自:IOC容器Unity 使用http://blog.csdn.net/gdjlc/article/details/8695266] 面向接口实现有很多好处,可以提供不同灵活的子类实现,增加 ...
- 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)
很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...
- [IoC容器Unity]第四回:使用范例
1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...
随机推荐
- mac 端口占用问题
查看端口号 终端输入:sudo lsof -i tcp:port 将port换成被占用的端口(如:8086.9998) 将会出现占用端口的进程信息. 杀死占用端口的PID进程 找到进程的PID,使用k ...
- django配置一个网站建设
第一步: 安装数据库MySQL,也可以使用pycharm自带的数据库sqllite,大项目要使用数据库.安装请参考上篇. 数据库在pycharm中驱动设置,setting文件中修改驱动文件密码等信息. ...
- PHP编译安装时常见错误解决办法
转载自:http://www.bkjia.com/PHPjc/1008013.html This article is post on https://coderwall.com/p/ggmpfa c ...
- C++ Primer 笔记——变量
1. 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替. 2.使用列表初始化内置类型的变量时,如果初始值存在丢失信息的风险,则编译器将报错 ...
- Variable binding depth exceeds max-specpdl-size
(setq max-specpdl-size 5) ; default is 1000, reduce the backtrace level (setq debug-on-error t) ; no ...
- 20165206 2017-2018-2 《Java程序设计》第五周学习总结
20165206 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 内部类:支持在一个类中定义另一个类的类. 外嵌类:包含内部类的类,称为内部类的外嵌类. 匿名 ...
- mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
在网上查了很久,有可能问题是出现在当从dual中取数据时,会将clob对象的字段转为Long型 最后的解决方法用到了Begin和end语法: 1.用到begin 和end 2.用到insert int ...
- MongoDB 入门
1 MongoDb 简介 MongoDB是为互联网而生的数据库,是文档数据库. 1.1 优点: Schema-less,不需要预先定义表结构,同一个"表"中可以保存多个格式的数据: ...
- [转] React之Immutable学习记录
从问题说起:熟悉 React 组件生命周期的话都知道:调用 setState 方法总是会触发 render 方法从而进行 vdom re-render 相关逻辑,哪怕实际上你没有更改到 Compone ...
- Quartz.NET作业调度框架的简单应用
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...