我想我可能会错过这里显而易见的事实。我希望通过约定进行自动绑定。我一直在关注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>>();
答案 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();
});