什么是依赖注入 IoC
Posted youmingkuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是依赖注入 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的主要内容,如果未能解决你的问题,请参考以下文章