Ninject:没有匹配的绑定可用,并且该类型不可自绑定

时间:2015-04-19 18:15:58

标签: c# dependency-injection ninject

编辑:问题已解决

这是我的错误消息:

  

消息=激活IValueCalculator时出错没有匹配的绑定   可用,并且类型不可自我绑定。激活路径:
    1)请求IValueCalculator

     

建议:

     

1)确保您已为IValueCalculator定义了一个绑定。

     

2)如果在模块中定义了绑定,请确保已将模块加载到内核中。

     

3)确保您没有意外创建多个内核。

     

4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。

     

5)如果使用自动模块加载,请确保搜索路径和过滤器正确无误。

抛在这里:

IValueCalculator calc = ninjectKernel.Get<IValueCalculator>();

这是我的约束力:

kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();

我在SO上发现了这个问题,但它没有帮助我(对吧?): Ninject WithConstructorArgument : No matching bindings are available, and the type is not self-bindable

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我同样面临同样的问题,我发现这是因为你使用bind方法传递的内核实例没有初始化。

我把代码请参考。

....
var kernel = new StandardKernel();
new NinjectDI(kernel).Load();
kernel.Load(Assembly.GetExecutingAssembly());
IValueCalculator calc = ninjectKernel.Get<IValueCalculator>();
...

class NinjectDI : NinjectModule
{
    StandardKernel kernel;
    public NinjectDI(StandardKernel kernel)
    {
        this.kernel = kernel;
    }
    public override void Load()
    {
        kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
    }
}

注意: Ensure you have not accidentally created more than one kernel.

答案 1 :(得分:0)

对我来说,我要绑定的类具有注入依赖性。

确保您要绑定的类所需的所有内容均已引用。