使用依赖注入注入不同类型的类

时间:2013-12-14 17:33:56

标签: c# dependency-injection

我是依赖注入的新手。在阅读有关Ninject的内容时,我对此产生了疑问。

在Ninject wiki中,我看到了依赖注入的基本示例。由此我怀疑了。

这是link

class Samurai
{
    readonly IWeapon weapon;
    public Samurai(IWeapon weapon)
    {
        this.weapon = weapon;
    }

    public void Attack(string target)
    {
        this.weapon.Hit(target);
    }
}
class Shuriken : IWeapon
{
    public void Hit(string target)
    {
        Console.WriteLine("Pierced {0}'s armor", target);
    }
}
class Program
{
    public static void Main() 
    {
        var warrior1 = new Samurai(new Shuriken());
        var warrior2 = new Samurai(new Sword());
        warrior1.Attack("the evildoers");
        warrior2.Attack("the evildoers");
    }
}

以下是该链接中提到的声明。

  

“当类紧密耦合时,它们不能在不改变它们的实现的情况下互换。为了避免紧密耦合类,我们可以使用接口来提供间接级别。”

如果我想创建名为Dress的新类并注入Samurai类。那个时候我还需要重写Samurai课程,如下所示

class Samurai
{
    readonly IWeapon weapon;
    readonly IDress dress
    public Samurai(IWeapon weapon, IDress dress)
    {
        this.weapon = weapon;
        this.dress = dress;
    }

    public void Attack(string target)
    {
        this.weapon.Hit(target);
    }

     public void Wear(){


     }
}

或者我还有其他选择???

1 个答案:

答案 0 :(得分:1)

你的问题与依赖注入或IoC有什么关系并不是很清楚,但你改变Samurai定义的另一个选择是将它扩展到一个新的类,例如。

public ClothedSamurai : Samurai
{
    readonly IDress dress;
    public ClothedSamurai(IWeapon weapon, IDress dress) : base(weapon)
    {
        this.dress = dress;
    }    

    public void Wear()
    {
        //whatever this does
    }    
}