Я использую Commands and CommandHandlers с регистрацией Castel Windsor. Есть несколько примеров:Замок Виндзорский комплекс общая регистрация
//command
public class DeleteEntityComand : ICommand
{
public int Id { get; set; }
}
//command handler
public class DeleteEntityCommandHandler : ICommandHandler<DeleteEnityComand>
{
...
}
//registrations
Types.FromAssembly(Assembly.GetAssembly(typeof(DeleteEntityCommandHandler)))
.BasedOn(typeof(ICommandHandler<>))
.WithService.AllInterfaces().LifestyleTransient()
И он отлично работает. Но теперь я хочу использовать универсальный обработчик команд, как это:
//command
public class SoftRemoveCommand<T> : ICommand
{
public int Id { get; set; }
}
//command handler
public class SoftRemoveCommandHandler<T> : ICommandHandler<SoftRemoveCommand<T>>
{
..
}
Но, к сожалению, в этом случае предыдущая регистрация не работает. Он пытается решить мой абстрактный BaseCommandHandler, который также реализует интерфейс ICommandHandler. Итак, как я могу правильно зарегистрировать свои общие обработчики команд?
Update:
После добавления WithService.Base:
//registrations
Types.FromAssembly(Assembly.GetAssembly(typeof(DeleteEntityCommandHandler)))
.BasedOn(typeof(ICommandHandler<>))
.WithService.AllInterfaces()
.WithService.Base()
.LifestyleTransient()
замок пытается решить SoftRemoveCommandHandler<SoftRemoveCommand<T>>
, но не SoftRemoveCommandHandler<T>
и он бросает исключение "не кул прокси".
Возможно ли сделать разрешение на застройку SoftRemoveCommandHandler<T>
, а не SoftRemoveCommandHandler<SoftRemoveCommand<T>>
?
Не могли бы вы опубликовать компилируемую часть кода, которая показывает проблему. Может быть, суть? – Marwijn