Ninject 绑定问题

Ninject Binding Issue

我有一个 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>();
    }
}

我有class这样的。但问题是如何创建 Samurai class 的实例?它的构造函数有参数(IWeapon),但参数是绑定的Sword或不同的class。当我想创建 Samurai class 的实例时,编译器需要 IWeapon 类型参数。在我的模块 class(如 WarriorModule)中,我已经定义了它的绑定。如何将参数(或其他方式)传递给 Samurai class 的构造函数?

试试这个

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>();
    }
}

我刚刚知道怎么做了。无需创建 ISamurai 接口。在战士模块中:

public class WarriorModule : NinjectModule
{
    public override void Load() 
    {
        Bind<IWeapon>().To<Sword>();
        Bind<Samurai>().ToSelf();
    }
}

要创建 Samurai 实例:

var samurai = kernel.Get<Samurai>();