什么是依赖注入 IoC
设计原则:依赖注入原则
依赖倒置原则,是一种程序设计模式的原则
高层模块不应该依赖底层模块,二者都应该依赖其抽象。
抽象不应该依赖细节,细节应该依赖抽象。依赖导致原则很好的体现了“面向接口编程”的思想。
Ioc容器是由依赖注入框架提供的,它是依赖注入框架中最主要的东西,它主要用来映射依赖管理对象创建和生存周期。
高耦合例子
这里是一个爸爸给孩子讲故事的例子,都是通过new来实例化类
class Program
{
static void Main(string[] args)
{
Father father = new Father();
father.Read();
}
} public class Book
{
public string GetContent()
{
return "很久很久以前,有个人叫盘古";
}
} public class Father
{
public void Read()
{
Book book = new Book();
Console.WriteLine("爸爸开始讲故事了");
Console.WriteLine(book.GetContent());
}
}
突然有一天,孩子不想听故事了,想听报纸上的内容。这里有需要添加一个报纸类
class Program
{
static void Main(string[] args)
{
Father father = new Father();
father.Read();
}
} public class Book
{
public string GetContent()
{
return "很久很久以前,有个人叫盘古";
}
} public class paper
{
public string GetContent()
{
return "报纸内容。。。。";
}
} public class Father
{
public void Read()
{
//Book book = new Book();
//Console.WriteLine("爸爸开始讲故事了");
//Console.WriteLine(book.GetContent()); paper paper = new paper();
Console.WriteLine("爸爸开始读报纸了");
Console.WriteLine(paper.GetContent());
}
}
这里发现 Father 被修改了,突然有一天小孩又想听看网页上的新闻。。。这里Father内容是不是又要修改了呢? 那肯定是的,这样Father会不断的被修改,耦合度太高,导致代码被频繁修改。这里能不能解耦呢?哎,那就用接口吧,降低耦合。来定义个接口
public interface IReader
{
string GetContent();
}
解耦例子
让 Book和paper 继承 IReader
class Program
{
static void Main(string[] args)
{
//先来读书
Father father = new Father(new Book());
father.Read();
}
} public interface IReader
{
string GetContent();
} public class Book:IReader
{
public string GetContent()
{
return "很久很久以前,有个人叫盘古";
}
} public class Paper : IReader
{
public string GetContent()
{
return "报纸内容。。。。";
}
} public class Father
{ public IReader Reader { get; set; }
//通过构造函数实例化接口
public Father(IReader reader) {
Reader = reader;
}
public void Read()
{
//Book book = new Book();
//Console.WriteLine("爸爸开始讲故事了");
//Console.WriteLine(book.GetContent()); //paper paper = new paper();
//Console.WriteLine("爸爸开始读报纸了");
//Console.WriteLine(paper.GetContent()); Console.WriteLine("爸爸开始了。。");
Console.WriteLine(Reader.GetContent()); }
}

在换一下Paper
static void Main(string[] args)
{
//先来读书
Father father = new Father(new Paper());
father.Read();
}

这样就实现了解耦。不用频繁修复Father,而是在调用的时候,随便调用。
什么是依赖注入 IoC的更多相关文章
- android使用篇(四) 注解依赖注入IOC实现绑定控件
在android使用篇(三) MVC模式中提到一个问题: 1) 视图层(View):一般採用XML文件进行界面的描写叙述,使用的时候能够很方便的引入,可是用xml编写了,又须要在Acitvity声明而 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
更新 1.如果看不懂本文,或者比较困难,先别着急问问题,我单写了一个关于依赖注入的小Demo,可以下载看看,多思考思考注入的原理: https://github.com/anjoy8/BlogArti ...
- Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
本文梯子 本文3.0版本文章 更新 代码已上传Github+Gitee,文末有地址 零.今天完成的绿色部分 一.依赖注入的理解和思考 二.常见的IoC框架有哪些 1.Autofac+原生 2.三种注入 ...
- 关于依赖注入IOC/DI的感想
之前一直不明白依赖注入有什么好处,甚至觉得它是鸡肋,现在想想,当时真是可笑. 这个想法正如同说接口是没有用处一样. 当整个项目非常庞大,各个方法之间的调用非常复杂,那么,可以想象一下,假设说没有任何的 ...
- DI依赖注入/IOC控制反转
DI依赖注入# 啥都不说,直接上代码 <?php class UserController { private $user; function __construct(UserModel $us ...
- Spring控制反转与依赖注入(IOC、DI)
IOC: 反转控制 Inverse Of Control DI:依赖注入 Dependency Injection 目的:完成程序的解耦合 解释:在应用系统的开发过程中,有spring负责对象的创 ...
- TypeC一个微软开发的超简单.NET依赖注入/IoC容器
控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...
- C# 一个初学者对 依赖注入 IOC 的理解( 含 Unity 的使用)
通过 人打电话 来谈谈自己对IOC的理解 版本1.0 public class Person { public AndroidPhone Phone { get; set; } public void ...
- 大话DI依赖注入+IOC控制反转(二) 之 浅析.Net Core中的DI与IOC
转发时请注明原创作者及地址,否则追究责任.原创:alunchen 在上一篇文章中,我们聊了很多关于定义的方面,比较孤燥,下面我们结合.Net Core聊一下依赖注入&控制反转. 三种对象生 ...
- 大话DI依赖注入+IOC控制反转(一) 之 定义
转发时请注明原创作者及地址,否则追究责任.原创:alunchen 依赖注入与控制反转 依赖注入与控制反转是老生常谈的问题.一般面试也会面试到这种问题.网上很多很多这方面的资料,搜索出来一大堆 ...
随机推荐
- word 转pdf 再转图片--用在轻社群发文章
#! /usr/bin/env python # -*- coding: utf-8 -*- import fitz import glob import os from win32com.clien ...
- linux命令当前文件夹下面模糊搜索文件
在当前文件夹下面模糊搜索文件: find . -type f | xargs grep 'boot',"boot"表示文件名中包含的字符串
- Linux怎么部署docker
Docker安装 建议在linux环境下安装Docker,window环境搭建比较复杂且容易出错,使用Centos7+yum来安装Docker环境很方便. Docker 软件包已经包括在默认的 Cen ...
- el-tabs 使用
el-tabs 使用 文章标题 网址 https://www.cnblogs.com/yuxiaole/p/9523735.html https://www.jianshu.com/p/571d832 ...
- 使用 Express Generator快速创建Express应用
全局安装express-generator npm install express-generator -g 根据需求生成自己需要的模板 生成ejs模板:express demo --view=ejs ...
- windows下的批处理bat文件和Linux下的shell文件的互相转换
shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 /[directory]/[directory]/.../[directory]/ [disk]:\[di ...
- You Can Customize Synthesized Instance Variable Names @property
As mentioned earlier, the default behavior for a writeable property is to use an instance variable c ...
- trait Monad:函数式编程类型系统本博客搜索关键字--类型升降
trait Monad:函数式编程类型系统本博客搜索关键字--类型升降
- C#中RadioButton选中和取消选中(一种没办法选中和未选中切换)
今天在做Winform 中RadioButton控件时,遇到一个小坑,虽然很简单,但是浪费我十分钟,感觉需要记录一下共勉. 问题描述:(RadioButton控件名为rbTime) 本来以为判断一下是 ...
- Zigzag Iterator II
Description Follow up Zigzag Iterator: What if you are given k 1d vectors? How well can your code be ...