Ninject соглашение на основе связывания - PullRequest
4 голосов
/ 01 февраля 2011

Еще раз, я думаю, я мог упустить очевидное здесь. Я ищу сделать автоматическое связывание по соглашениям. Я смотрел на проект 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 ]

4 голосов
/ 04 февраля 2011

попробуйте посмотреть GenericBindingGenerator вместо DefaultBindingGenerator.

1 голос
/ 07 октября 2011
// 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>();
    });
0 голосов
/ 04 февраля 2011

Решение:

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