Как автоматически зарегистрировать открытый общий интерфейс в Castle Windsor?
Мне нужно автоматически зарегистрировать мой открытый универсальный интерфейс для классов его реализации. Мой интерфейс похож на этот IIntegrationEventHandler
public interface IIntegrationEventHandler<in TIntegrationEvent>
where TIntegrationEvent : BaseIntegrationEvent
{
Task HandleAsync(TIntegrationEvent @event);
}
Мои обработчики будут примерно такими
public class EmployeeEventsHandler : IIntegrationEventHandler<EmployeeUserCreated>
{
public async Task HandleAsync(EmployeeUserCreated @event)
{
throw new NotImplementedException();
}
}
Есть ли в Касл Виндзоре какой-либо общий способ сделать такую регистрацию, не делая это вручную с каждым обработчиком, я много искал, но ничего не заметил, что у меня нет базового класса обработчика, только универсальный интерфейс и классы реализации
1 ответ
Решение
Регистрация по соглашениям должна работать здесь:
var container = new WindsorContainer();
container.Register(
Classes.FromAssemblyNamed("YourHandlersAssemblyName")
.BasedOn(typeof(IIntegrationEventHandler<>))
.WithServiceFirstInterface());
var handler = container.Resolve<IIntegrationEventHandler<EmployeeUserCreated>>();