Ninject绑定问题

时间:2015-03-04 13:12:51

标签: c# wcf ninject

我有一个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类的构造函数?

2 个答案:

答案 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>();