Я работаю с IoC, а точнее с Windsor, и у меня есть большие сомнения в одном. Прямо сейчас я реализую уровень команд DDD, поэтому для каждой команды у меня есть конкретный класс, как показано ниже.
public class CreateUserCommand : IDomainCommand{
/// implementation
}
Каждая команда имеет 1 или более обработчиков со следующей реализацией
public class CreateUserHandler : IDomainCommandHandler<CreateUserCommand>
{
public void Handle(CreateUserCommand command)
{
/// implementation
}
}
Проблема возникает с моим диспетчером команд. Я использую следующую форму на данный момент
public class CommandDispatcher : ICommandDispatcher
{
private IWindsorContainer container;
public CommandDispatcher(IWindsorContainer container)
{
this.container = container;
}
public void Dispatch<T>(T command)
{
var commandHandler = container.Resolve<ICommandHandler<T>>();
commandHandler.Handle(command);
}
}
Что мне не нравится, так это осведомленность диспетчера о контейнере IoC, но точно так же я не знаю, как я могу разрешить обработчики только тогда, когда они мне нужны. Оболочка Я внедряю фабрику обработчиков в Dispatcher и использую ее для разрешения моих обработчиков во время выполнения?