2013-12-14 77 views
1

我是新来的依赖注入。在阅读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类。那个时候我也需要重写武士阶层知道像下面

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

你不清楚你的问题与依赖注入或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 
    }  
} 
+0

Thanks Preston Guillot – Harishankaran