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的使用。

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

  • 相关阅读:
    游戏 黑白棋
    题解 P2472 【[SCOI2007]蜥蜴】
    题解 P1682 【过家家】
    题解 P3153 【[CQOI2009]跳舞】
    题解 P2763 【试题库问题】
    题解 P1345 【[USACO5.4]奶牛的电信Telecowmunication】
    网络流----最大流
    Tarjan缩点
    C#之抽象类
    C#之深复制学习案例
  • 原文地址:https://www.cnblogs.com/czy/p/1655170.html
Copyright © 2011-2022 走看看