• 什么是依赖注入 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,而是在调用的时候,随便调用。

  • 相关阅读:
    linux tcp调优
    nginx 代理http配置实例
    nginx代理socket tcp/udp
    C++对象数组初始化
    《大型网站技术架构》读书笔记
    内核空间、用户空间和虚拟地址(转)
    集群——LVS理论(转)
    Linux服务器集群系统(一)(转)
    从一个开发的角度看负载均衡和LVS(转)
    ubuntu下允许root用户ssh远程登录
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/11963404.html
Copyright © 2020-2023  润新知