Как автоматически зарегистрироваться по совпадению имен в замке Виндзор? - PullRequest
0 голосов
/ 12 сентября 2018

Я проверил много ответов и статей, прежде чем написать это, но мне это не удалось. Я хочу зарегистрировать все классы, которые являются производными от 1 конкретного интерфейса IInject

У меня есть такой интерфейс:

public interface IFoo : IInject
{
    string GetOrder();
}

Чтобы автоматически зарегистрировать IFoo, я смог это сделать в Ninject так:

kernel.Bind(c =>
 c.FromAssembliesMatching("Core.*.dll")
  .SelectAllIncludingAbstractClasses()
  .InheritedFrom<IInject>()
  .BindAllInterfaces());

Но в Виндзорском замке я не смог. Если вы должны знать, что интерфейс IInject является пустым интерфейсом только для запуска автоматической регистрации:

public interface IInject
{
   //Nothing in this interface
}

Как использовать эту скороговорку СОВМЕЩЕНИЯ или СОДЕРЖАНИЯ в замке Виндзор?

Спасибо

1 Ответ

0 голосов
/ 14 сентября 2018

В заголовке вашего вопроса спрашивается о сопоставлении по пространству имен, тогда как в самом вопросе вы спрашиваете об интерфейсе маркера.

Оба варианта возможны с Windsor.

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

Теперь, вернемся к вашему вопросу, если вы хотите зарегистрироваться по пространству имен, вы бы что-то сделалинапример:

container.Register(Classes.FromThisAssembly()
    .InSameNamespaceAs<IInject>()
    .WithService.DefaultInterfaces() // or whatever makes sense
    .LifestyleTransient()); // or whatever makes sense

Для регистрации по интерфейсу маркера вы должны сделать что-то вроде:

container.Register(Classes.FromThisAssembly()
    .BasedOn<IInject>()
    .WithService.DefaultInterfaces() // or whatever makes sense
    .LifestyleTransient()); // or whatever makes sense

Опять же, не просто скопируйте / вставьте код, но убедитесь, что вы полностью понимаю, что он здесь делает.

...