Как автоматически зарегистрировать открытый универсальный интерфейс в 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>>();
person Jan Muncinsky    schedule 17.04.2018
comment
Привет @jan, спасибо за ваш ответ, да, это работает, но объект с разрешением прокси-сервера не работал должным образом. - person yo2011; 17.04.2018
comment
@yo2011, тогда вам следует отредактировать свой вопрос, чтобы показать, что вы имеете в виду. - person Jan Muncinsky; 17.04.2018
comment
Привет @jan, твой ответ - это то, что я ищу, но когда я пытаюсь выполнить свой обработчик, я получаю сообщение об ошибке Object disposed - person yo2011; 17.04.2018
comment
Спасибо, я решил проблему, и ваше решение работает правильно - person yo2011; 17.04.2018
comment
Чтобы быть более явным (и избежать двусмысленности, если ваши классы реализуют более одного интерфейса, я бы предложил небольшую настройку для использования вместо этого .WithServiceBase() - person Krzysztof Kozmic; 01.05.2018