为什么说DI解耦
为什么说IOC/DI(控制反转/依赖注入)降低耦合
public class HomeController : Controller
    {
        private readonly IStudentReponstory _studentReponstory;
	////使用构造函数的方式注入 IStudentReponstory
    //public HomeController(IStudentReponstory studentReponstory)
    //{
    //    _studentReponstory = studentReponstory;
    //}
    public HomeController()
    {
        //在构造函数中直接实例化服务而不是通过接口注入
        _studentReponstory = new MockStudentReponstory();
    }
    public string Index()
    {
        return _studentReponstory.GetStudentById(1).name;
    }
}
 以上述的一个demo为例,传统用new直接实例化的方式,会使 HomeController 与 MockStudentReponstory 紧密耦合,如果我想使用新的 IStudentReponstory 接口实例,如:SqlStudentReponstory、DatabaseStudentReponstory 我必须要在 HomeController 中修改代码,将 new MockStudentReponstory() 改为 new SqlStudentReponstory(),new DatabaseStudentReponstory () 。这还只是一个控制器,如果是项目中的控制器都这样直接实例化,那意味着我需要在每个控制器中修改代码,想想都可怕
 而以依赖注入的方式,在构造函数中注入接口而不是具体实现,意味着我们如果需要改变实例方法,只需要修改接口对应的服务一个地方就行,而不是到具体的控制器中修改。以.net core 为例,我们只需要修改Startup.cs文件中注册的服务就行
为什么说DI解耦的更多相关文章
- Yii2.0 依赖注入(DI)和依赖注入容器的原理
		
依赖注入和依赖注入容器 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Serv ...
 - Captcha服务(后续1)
		
既然标题为后续,就要放一下上一篇文章使用.Net Core 2.1开发Captcha图片验证码服务 继续挖坑 时隔7个月再次继续自己在GitHub上挖的坑 https://github.com/Puz ...
 - yii依赖注入和依赖注入容器
		
依赖注入和依赖注入容器¶ 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Ser ...
 - 记录一次BUG修复-Entity Framwork SaveChanges()失效
		
目录 一. 前言 二.问题背景 三.问题描述 四.问题解决步骤 六.总结 一. 前言 这是笔者在参与一个小型项目开发时所遇到的一个BUG,因为项目经验不足对Entity Framwork框架认识不足导 ...
 - yii依赖注入
		
为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Service Locator) ...
 - Node EE方案 -- Rockerjs在微店的建设与发展
		
本文是根据2019.4.13日参加 "Node-Party"论坛使用的PPT,加上笔者新的思考与沉淀而来.在此再次感谢贝贝网前端部门和芋头君以及相关与会人员的支持! -- 微店杨力 ...
 - PHPCon 2019 第七届 PHP 开发者大会总结
		
往届回顾-2018:PHPCon 2018链接: https://pan.baidu.com/s/17nfrfqk9K4vwKPAsjBVW7A——提取码:rjbr 随着PHP7的诞生,兼顾了高性能和 ...
 - 依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)
		
依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见 ...
 - MVC 5 + EF6 完整教程15 -- 使用DI进行解耦
		
如果大家研究一些开源项目,会发现无处不在的DI(Dependency Injection依赖注入). 本篇文章将会详细讲述如何在MVC中使用Ninject实现DI 文章提纲 场景描述 & 问题 ...
 
随机推荐
- Java8使用并行流(ParallelStream)注意事项
			
Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率.但是如果使用不当可能会发生线程安全的问题.Demo如下: public static void co ...
 - linux vi(vim)常用命令汇总(转)
			
前言 首先解析一个vim vi是unix/linux下极为普遍的一种文本编辑器,大部分机器上都有vi的各种变种,在不同的机器上常用不同的变种软件,其中vim比较好用也用的比较广泛.vim是Vi Imp ...
 - fastjson过滤多余字段
			
/** * Description:过滤实体中的字段 * @param src 需要过滤的对象,如 list,entity * @param clazz 实体的class ...
 - 解决ViewPager与ScrollView 冲突
			
ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换. 因为Android事件机制是从父 ...
 - 监控网站是否异常的shell脚本
			
本节内容:shell脚本监控网站是否异常,如有异常就自动发邮件通知管理员. 脚本检测流程,如下:1,检查网站返回的http_code是否等于200,如不是200视为异常.2,检查网站的访问时间,超过M ...
 - 收集linux网络配置信息的shell脚本
			
此脚本已在CentOS/ RHEL和Fedora Linux操作系统下进行测试过.可用于当前网络配置信息. 代码: #!/bin/bash # HWINF=/usr/sbin/hwinfo IFCFG ...
 - springboot 设置项目路劲后不能访问首页
			
环境背景 学习版本 : springboot2.31 controller 代码 @controller public class Iindex{ @RequestMapping("/&q ...
 - jQuery - 的几种删除方法,还有他们的区别
			
1.empty() 清空节点,它能清空元素中的所有后代节点,不能删除自己本身这个节点 2.remove() 该节点与该节点所包含的所有后代节点将同时被删除,提供传递一个筛选的表达式,删除指定合集中的元 ...
 - ClassLoader.loadClass()与Class.forName()的区别《 转》
			
ClassLoader.loadClass()与Class.forName()区别: ClassLoader.loadClass()与Class.forName()大家都知道是反射用来构造类的方法,但 ...
 - [BUUCTF]REVERSE——[2019红帽杯]easyRE
			
[2019红帽杯]easyRE 附件 步骤: ida载入,没有main函数,就先检索了程序里的字符串 发现了base64加密的特征字符串,双击you found me跟进,找到了调用它的函数,函数很长 ...