2011-01-31 4 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 override – WorldIsRound

+0

Я не уверен, что понимаю, что вы имеете в виду здесь. Теперь у меня есть код Kernel.Scan внутри метода NinjectModule.Load(). – Mike

ответ

4

попытка смотреть на GenericBindingGenerator вместо DefaultBindingGenerator.

+0

Это билет! Спасибо. Вы просто знаете, что искать иногда! – Mike

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>(); 
    }); 
Смежные вопросы