理解IoC和DI有什么好的比喻?

时间:2010-07-20 16:23:53

标签: dependency-injection inversion-of-control

理解IoC和DI有什么好的比喻?

3 个答案:

答案 0 :(得分:7)

如果你采用汽车的经典例子。您可以通过常规汽车购买流程并采取制造商为您提供的轮子:

public class Fifteens
{
    public void Roll() { Console.WriteLine("Nice smooth family ride..."); }
}

public class Car
{
    Fifteens wheels = new Fifteens();

    public Car() { }

    public void Drive() { wheels.Roll; }
}

然后:

Car myCar = new Car(); 
myCar.Drive() // Uses the stock wheels 

或者您可以找到一个自定义的Car构建器,它允许您准确指定您希望Car使用哪种类型的车轮,只要它们符合车轮的规格:

public interface IWheel
{
    void Roll();
}

public class Twenties : IWheel
{
    public void Roll() { Console.WriteLine("Rough Ridin'...");
}

public class Car
{
    IWheel _wheels;

    public Car(IWheel wheels) { _wheels = wheels; }

    public void Drive() { wheels.Roll(); }
}

然后:

Car myCar = new Car(new Twenties()); 
myCar.Drive(); // Uses the wheels you injected.

但是现在你可以注入你想要的任何类型的轮子。请记住,他只是一种依赖注入(构造函数注入),但它是最简单的示例之一。

答案 1 :(得分:2)

Martin Fowler表现出色explaining those patterns

答案 2 :(得分:2)

有几种不同的类比可以让理解控制反转变得更容易。我们在常规生活中以许多不同的方式体验这一点,因此我们在代码中借用表单。一个类比被称为军队中的“指挥链”。

这可能是与控制反转最明显的平行。军方为每个新兵提供他所需要的基本事物,并发布新兵必须遵守的命令。同样的原则适用于代码。每个组成部分都有实例化实体所需的规定(即这个类比中的指挥官)。然后,实例化实体对该组件的行为采取行动。

更多信息:

Does anyone have a good analogy for dependency injection?