2013-06-03 6 views
1

У меня есть следующие интерфейсы, введенные в Castle Windsor. как я могу сделать то же самое в Ninject?Пакетная регистрация всех реализаций общего интерфейса с Ninject

container.Register(
    AllTypes.FromAssemblyNamed("Apps.Web") 
     .BasedOn(typeof(ICommandHandler<>)) 
     .WithService.FirstInterface()); 

я пробовал:

this.Bind(x => x.FromAssembliesMatching("Apps.Web.dll") 
    .Select(y => y.Namespace.EndsWith("Handlers")) 
    .BindSingleInterface()); 

но получение объекта не задана ссылка на экземпляр объекта ошибки.

ответ

6

Вы можете использовать Ninject's convention binding extensons (установите его с NuGet).

Нечто подобное должно работать

kernel.Bind(x => x.FromAssembliesMatching("Apps.Web") 
    .SelectAllClasses() 
    .InheritedFrom(typeof(ICommandHandler<>)) 
    .BindSingleInterface()); 

Я не 100% уверен в FromAssembliesMatching модели, но вы должны быть в состоянии настроить, что подобрать сборку.

+0

который работал. Я вижу привязки kernel.GetModules(). но я не вижу его в kernel.GetAll >()? – CurlyFro

+0

Значит, он связан, но вы не можете его решить? Hmm ... – khellang

+0

Я пробовал то же самое, но с 'FromThisAssembly' и' GetAll >() 'отлично работает ... Wierd. – khellang

Смежные вопросы