Umut Derbentoğlu
Umut Derbentoğlu

Reputation: 1196

Ninject Binding Issue

I have a wcf service application and I have just implemented ninject library. In ninject web site there is following example:

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

I have classes like this. But problem is how can I create instance of Samurai class? It's constructor have parameter (IWeapon), but the parameter is binded Sword or different class. When I want to create instance of Samurai class, compiler expects IWeapon type parameter. In my module class (like WarriorModule) I have already defined it's binding. How can I pass parameter (or some different way) to Samurai class's constuctor?

Upvotes: 0

Views: 101

Answers (2)

Umut Derbentoğlu
Umut Derbentoğlu

Reputation: 1196

I just figured out how to do is. There is no need to create ISamurai interface. In Warriormodule:

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

To create Samurai instance:

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

Upvotes: 0

Mario Galeano
Mario Galeano

Reputation: 80

Try this

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

Upvotes: 2

Related Questions