IoC与DI,Unity的使用
IoC的全称为Inversion of Control(控制反转),DI的全称为Dependency Injection(依赖注入)。IoC是一个控制容器,我们将设计好的对象放入到容器中,将对象交给容器去主动创建。DI是容器的运行机制,在IoC容器的运行期间,动态的将对象所依赖的对象注入到对象之中。
关于IoC框架有很多,比如从Java中移植过来的
Spring.NET和微软的Unity等,这篇文章主要介绍Unity的使用。
我们拿人与手机来做一个示例,在示例中我们需要输出这个人在玩什么手机的一段文字,所以我们需要一下类:
People:人类Phone:手机类
People类依赖Phone类,但没有在People类中主动new依赖对象,而是添加了一个带有参数的构造方法,等待依赖对象被注入:
public interface IPeople
{
void PlayPhone();
}
public class People : IPeople
{
IPhone _phone = null;
public People(IPhone phone)
{
_phone = phone;
}
public void PlayPhone()
{
Console.WriteLine("Play {0}", _phone.IPhoneXS());
}
}
public interface IPhone
{
string IPhoneXS();
}
public class Phone : IPhone
{
public string IPhoneXS()
{
return "iPhone XS";
}
}
通过注册的方式在控制台输出文字:
static void Main(string[] args)
{
// 初始化容器
UnityContainer unityContainer = new UnityContainer();
// 注册依赖对象
unityContainer.RegisterType<IApple, Apple>();
// 注册调用者
unityContainer.RegisterType<IPeople, People>();
// 返回调用者
IPeople people = unityContainer.Resolve<IPeople>();
people.PlayPhone();
Console.ReadLine();
}
通过传参的方式在控制台输出文字:
static void Main(string[] args)
{
// 初始化容器
UnityContainer unityContainer = new UnityContainer();
// 注册调用者
unityContainer.RegisterType<IPeople, People>();
// 返回调用者并传递参数
// Unity 5.9.x版本语法
ParameterOverride param = new ParameterOverride("phone", new Phone { Name = "IPhone XS" });
IPeople people = unityContainer.Resolve<IPeople>(param);
// Unity 5.8.x及以下版本语法
//IPeople people = unityContainer.Resolve<IPeople>(new ParameterOverrides
//{
// { "apple", new Apple() }
//});
people.PlayPhone();
Console.ReadLine();
}
使用IoC容器可以使对象与对象之间的耦合降低,这样整体的架构就变得更加的灵活,维护起来也会变得更加的方便。
作者:huayueniansi
链接:https://www.jianshu.com/p/b30f42245d01
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
IoC与DI,Unity的使用的更多相关文章
- 深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
- 深入理解IOC模式及Unity框架
研究了下,有几篇博客确实已经说得很清楚了 1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 这篇博客是通过一个 ...
- IoC和DI的理解
1 概述 当我们想闭上眼睛想如何让我们的软件更加可用可维护时,我们总能想到一个词:松耦合.在这篇文章中,主要讲述了模块间存在的依赖关系,但这种依赖关系违背了依赖倒置原则.在这之后,我们将讨论一种解除软 ...
- 深入理解DIP、IoC、DI以及IoC容器(转)
深入理解DIP.IoC.DI以及IoC容器 摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.D ...
- 【转】深入理解DIP、IoC、DI以及IoC容器
原文链接:http://www.cnblogs.com/liuhaorain/p/3747470.html 前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有 ...
- DIP、IoC、DI以及IoC容器
深入理解DIP.IoC.DI以及IoC容器 摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.D ...
- 【来龙去脉系列】深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- IOC模式及Unity框架文章收藏
1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 通过Unity实现IOC容器. 2.深入理解DIP.IoC.D ...
随机推荐
- CentOS7 破解登录密码
1.重启系统,在出现下面这个界面时按e 2.进入之后方向键的下,找到“LANG=en_US.UTF-8",在这个命令后面输入“rd.break",完成之后按ctrl+x进入紧急救援 ...
- 旧接口注册LED字符驱动设备(静态映射)
#include <linux/init.h> // __init __exit #include <linux/module.h> // module_init module ...
- Djaon 基于 Ajax 的 json 数据传输
关键参数:contentType:"application/json" data:JSON.stringify({ json数据 }) 再views.py中,使用request.d ...
- Linux 使用ansible配置集群间互信
安装pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 $ sudo python get-pip.py # ...
- 初步理解React
1.组件化 在 MV* 架构出现之前,组件主要分为两种: 狭义上的组件,又称为 UI 组件,比如 Tabs 组件.Dropdown 组件.组件主要围绕在交互 动作上的抽象,针对这些交互动作,利用 Ja ...
- web开发中SESSION的本质
有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...
- Python实战之网上银行及购物商城
前言:这是初学时写的小项目,觉得有意思就写来玩玩,也当是巩固刚学习的知识.现在看来很不成熟,但还是记录一下做个纪念好了~ 1.名称:网上网上银行及购物商城 2.项目结构: 当时刚接触python啦,哪 ...
- 2018-9-1-win10-17025-触摸bug
title author date CreateTime categories win10 17025 触摸bug lindexi 2018-09-01 09:50:18 +0800 2018-2-1 ...
- jvm监控和诊断工具
大牛写的Java的OOM Killer:https://www.jianshu.com/p/4645254be259 强烈推荐 总的参考链接:https://cloud.tencent.com/dev ...
- 2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板
基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板 综合图像处理硬件平台包括图像信号处理板2块,视频处理板1块,主控板1块,电源板1块,VPX背 ...