我是依赖注入的新手。在阅读有关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(){
}
}
或者我还有其他选择???
答案 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
}
}