zoukankan      html  css  js  c++  java
  • C# 依赖注入

    依赖注入的另外一个意思便是控制反转,也就是说将控制权交给被调用者。

    百度百科定义:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)

    依赖注入的用处便是解除类之间直接依赖关系的方法,减小模块化设计的耦合性,即增加可维护性。

    假设我们有A,B两个模块,B要调用A来实现某种功能,通常最直接的做法是将A在B中创建实例:

    ps:

    interface IA{

    void PlayMusic();

    }

    public A1:IA{

    public void PlayMusic(){

    console.WriteLine('轰轰轰');

    }

    }

    public A2:IA{

    public void PlayMusic(){

    console.WriteLine('吼吼吼');

    }

    }

    public class B{

    var a= new A1;

    public void PlayMusic(){

       a.PlayMusic();

    }

    }

    这里有连个缺点:

    缺点:A1与B的耦合性,需要播放音乐完全依赖于调用者B,这时假如IA有两个子类,但是按照上面的硬编码,B只能实现A1播放音乐的功能。

    设想:如果我们将B的控制权交给被调用者IA,那么B要实现的播放功能由IA的实例决定,我传入A1的实例则播放A1的音乐,传入A2的实例则播放A2的音乐,控制权转交给IA,这时的耦合性降低了许多。

    依赖注入最常用的两种方式是setter注入(属性注入)和构造函数注入,除此之外,还有接口注入。

    下面我们来看两种依赖注入的方式:

    1、构造函数注入

    public class B{

    public IA a;

    public B(IA a){

     this.a=a;

    }

    public void PlayMusic(){

    a.PlayMusic();

    }

    }

    2、属性注入

    public class B{

    public IA a{

    get;

    set;

    }

    public void PlayMusic(){

    a.PlayMusic();

    }

    }

    public class Main(){

    B b=new B();

    b.a=new A1();

    b.PlayMusic();

    }

    以上创建的实例a都不是在B中硬编码,而是通过外部注入到B中的,从而将具体播放音乐的功能转移给外部注入到B中的a决定。

    上面介绍的是依赖注入的概念性上的解释,有兴趣同学们可以去看spring.net资料,将依赖关系转移到config配置文件中,可以说是最大的程度转移了控制权。

    参考地址:

    https://blog.csdn.net/hahajchahajc/article/details/47316189

    https://blog.csdn.net/zhonghua_csdn/article/details/90090263?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=947afa4e-bb61-4d27-8f1c-8d32cb6ac1d2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

    https://blog.csdn.net/Chen104617590/article/details/81775939?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&dist_request_id=947afa4e-bb61-4d27-8f1c-8d32cb6ac1d2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/JoeYD/p/14428868.html
Copyright © 2011-2022 走看看