2011-01-31 64 views
4

再一次,我想我可能會錯過這裏的明顯。我正在尋找習慣做自動綁定。我一直在看Ninject.extension.conventions項目和程序集掃描器。基於Ninject約定的綁定

我所擁有的是看起來像下面的很多線路,我想自動綁定:

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

你試過kernel.Load(Assembly.GetExecutingAssembly());你需要把它放在CreateKernel覆蓋 – WorldIsRound 2011-02-01 20:00:07

+0

我不知道我明白你的意思。我現在有一個NinjectModule.Load()方法中的Kernel.Scan代碼。 – Mike 2011-02-02 23:12:30

回答

4

試試看GenericBindingGenerator而不是DefaultBindingGenerator

0

解決辦法:

Kernel.Scan(x => { 
    x.FromAssemblyContaining<CoreModule>(); 
    x.BindingGenerators.Add(new GenericBindingGenerator(typeof(IHandleQuery<,>))); 
     x.InSingletonScope(); 
}); 
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>(); 
    });