我有一个wcf服务应用程序,我刚刚实现了ninject库。在ninject网站上有以下示例:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon)
{
this.Weapon = weapon;
}
}
public class WarriorModule : NinjectModule
{
public override void Load()
{
this.Bind<IWeapon>().To<Sword>();
}
}
我有这样的课程。但问题是如何创建Samurai
类的实例?它的构造函数有参数(IWeapon
),但参数是绑定的Sword
或不同的类。当我想创建Samurai
类的实例时,编译器需要IWeapon
类型参数。在我的模块类(如WarriorModule
)中,我已经定义了它的绑定。如何将参数(或某种不同的方式)传递给Samurai
类的构造函数?
答案 0 :(得分:2)
试试这个
class Program
{
static void Main(string[] args)
{
IKernel kernel = new StandardKernel(new WarriorModule());
var samurai = kernel.Get<ISamurai>();
}
}
public interface ISamurai
{
}
public class Samurai : ISamurai
{
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon)
{
this.Weapon = weapon;
}
}
public interface IWeapon
{
}
public class Sword : IWeapon
{
}
public class WarriorModule : NinjectModule
{
public override void Load()
{
this.Bind<ISamurai>().To<Samurai>();
this.Bind<IWeapon>().To<Sword>();
}
}
答案 1 :(得分:0)
我只是弄明白该怎么办。无需创建ISamurai界面。在Warriormodule:
public class WarriorModule : NinjectModule
{
public override void Load()
{
Bind<IWeapon>().To<Sword>();
Bind<Samurai>().ToSelf();
}
}
创建Samurai实例:
var samurai = kernel.Get<Samurai>();