zoukankan      html  css  js  c++  java
  • 关于依赖注入的一点认识(Dependency Injection) CQ

    学习Smart Client,免不了要碰到Dependency Inject。

    关于Dependency Inject,推荐阅读 Martin Fowler的Dependency Inject

    以前也不止一次地听说过依赖注入,但是没有专门花时间去研究,今天看完的第一个感受就是在玩地址游戏。

    例如,我们在代码中定义一个变量。

    ObjX x = new ObjX();

    x.DoSomething();

    这里,我们获得了一个x的地址,而这个地址直接指向ObjX的实例。而当前代码的上下文就直接依赖于ObjX。而这种依赖的实际意义就是将DoSomething的逻辑定义和DoSomething的逻辑实现绑定在一起。

    当有一天,我们需要将DoSomething的逻辑定义用另外一种逻辑实现来实现时,接口就被引入。

    IObjX x = new ObjX1();

    x.DoSomething();

    这里,我们同样获得了一个x的地址,而这个地址指向ObjX1的实例。虽然代码的上下文还是直接依赖于XObj1()。而这种依赖和上面的依赖相比有了不同,它是通过接口来实现的依赖。DoSomething的逻辑定义可以通过接口绑定到各种逻辑实现上。

    人类总是有更多的需求,而这种需求往往会促使新事物的诞生。

    有人就索性只在上下文的代码中只定义接口,即只有IObjX,而关于IObjX的实现,则完全不管,并将其编译为二进制组件发布。而关于IObjX的实现,则通过依赖注入的方式,在该组件被使用时,动态加载。这里,我个人觉得对IObjX的使用,就是为了获得一个逻辑层面的地址,然后再运行时,再将该逻辑地址映射到一个实际的实例地址上。

    关于依赖注入的原理看似简单,但是如何实现运行时逻辑地址与实例地址的绑定,可谓是百花齐放,百家争鸣。

    我会在后来的blog中阐述一下MEF的使用。

    以上是个人的不成熟想法,还希望大家多多指教。

  • 相关阅读:
    bzoj2588 Count on a tree
    poco对象生成的几种方式根据你使用不同的ui决定
    airtest本地连接和远程连接
    python音频文件中pcm格式提取
    python提取视频中的音频
    如何理解快速排序的时间复杂度是O(nlogn)
    剑指 Offer 45. 把数组排成最小的数
    剑指 Offer 44. 数字序列中某一位的数字
    剑指 Offer 43. 1~n 整数中 1 出现的次数
    剑指 Offer 41. 数据流中的中位数
  • 原文地址:https://www.cnblogs.com/czy/p/1655170.html
Copyright © 2011-2022 走看看