基于Ninject约定的绑定

时间:2011-01-31 21:42:35

标签: binding ninject conventions

我想我可能会错过这里显而易见的事实。我希望通过约定进行自动绑定。我一直在关注Ninject.extension.conventions项目和汇编扫描程序。

我所拥有的是很多看起来如下的行,我想自动绑定:

Bind<ICommandHandler<MyCommand>>().To<MyCommandHandler>();
Bind<ICommandHandler<MyOtherCommand>>().To<MyOtherCommandHander>();

我尝试了几种变体:

Kernal.Scan(x => {
    x.FromAssemblyContaining<MyCommand>();
    x.WhereTypeInheritsFrom(typeof(ICommandHander<>));
    x.BindWith(new DefaultBindingGenerator());
});

但是在以下情况下没有返回实例:

kernel.Get<ICommandHandler<T>>(); 

3 个答案:

答案 0 :(得分:4)

尝试查看GenericBindingGenerator而不是DefaultBindingGenerator

答案 1 :(得分:1)

// use Ninject.Extensions.Conventions for convention-based binding
kernel.Scan(scanner =>
    {
        // look for types in this assembly
        scanner.FromCallingAssembly();

        // make ISomeType bind to SomeType by default (remove the 'I'!)
        scanner.BindWith<DefaultBindingGenerator>();
    });

答案 2 :(得分:0)

解决方案:

Kernel.Scan(x => {
    x.FromAssemblyContaining<CoreModule>();
     x.BindingGenerators.Add(new GenericBindingGenerator(typeof(IHandleQuery<,>)));
      x.InSingletonScope();
});