用Ninject注入构造函数2
本文关键字:构造函数 注入 Ninject | 更新日期: 2023-09-27 17:54:09
我使用了带有MVC3的Ninject来自动注入构造函数参数。效果很好。
如何对非mvc代码做类似的事情?
例如:public class Ninja
{
private readonly IWeapon _weapon;
public Ninja(IWeapon weapon)
{
_weapon = weapon;
}
public void Strike()
{
_weapon.Strike();
}
}
public class MyProgram
{
public void DoStuff()
{
var Ninja = new Ninja(); // I'm wanting Ninject to call the parameterized Ninja constructor
ninja.Strike();
}
}
我该如何修改代码以使其工作?
public interface IWeapon
{
void Strike();
}
public class Sword : IWeapon
{
public void Strike()
{
Console.WriteLine("black ninja strike");
}
}
public class Ninja
{
private readonly IWeapon _weapon;
public Ninja(IWeapon weapon)
{
_weapon = weapon;
}
public void Strike()
{
_weapon.Strike();
}
}
public class WarriorModule : NinjectModule
{
public override void Load()
{
Bind<IWeapon>().To<Sword>();
}
}
class Program
{
static void Main()
{
var kernel = new StandardKernel(new WarriorModule());
var ninja = kernel.Get<Ninja>();
ninja.Strike();
}
}
不就是:
var ninja = Kernel.Get<Ninja>();
显然你必须通过Ninject来解决依赖关系。
您需要有一个StandardKernel
的实例,我们称之为kernel
,然后使用kernel.Get<Ninja>()
。这是可行的,因为Ninja是非抽象的,所以它被认为是绑定到自己的。显然,需要将一些具体类型绑定到IWeapon以允许NInject创建Ninja。