Как автоматически зарегистрировать открытый общий интерфейс в 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>>();