Я просто хочу, чтобы зарегистрировать общий обработчик команд с Виндзорский замок, это то, что я сделал в ControllerInstaller:Устранить зависимость Command Handler с Виндзорский замок
container.Register(
Classes
.FromAssemblyContaining<ProductCommand>()
.Where(t => t.Name.EndsWith("CommandHandler"))
.WithService.AllInterfaces()
.LifestylePerWebRequest());
и это мой класс ProductCommandHandler:
public class ProductCommandHandler : ICommandHandler<CreateProductCommand>
{
}
, а также мой ICommandHandle
это:
public interface ICommandHandler<in TCommand> where TCommand : ICommand
{
ICommandResult Execute(TCommand command);
}
и это, где я получаю ошибку:
public class DefaultCommandBus : ICommandBus
{
public ICommandResult Send<TCommand>(TCommand command)
where TCommand : ICommand
{
var handler = DependencyResolver.Current
.GetService<ICommandHandler<TCommand>>();
if (!((handler != null) && handler != null))
{
throw new CommandHandlerNotFoundException(typeof(TCommand));
}
return handler.Execute(command);
}
public IEnumerable<ValidationResult> Validate<TCommand>(TCommand command)
where TCommand : ICommand
{
var handler = DependencyResolver.Current
.GetService<IValidationHandler<TCommand>>();
if (!((handler != null) && handler != null))
{
throw new ValidationHandlerNotFoundException(typeof(TCommand));
}
return handler.Validate(command);
}
}
я решить проблему с autofac это линия ниже:
builder.RegisterAssemblyTypes(ThisAssembly)
.AsClosedTypesOf(typeof(ICommandHandler<>)).InstancePerRequest();
, но я не знаю, как я должен решить через замок Виндзор, помогите мне
Я думаю, что действительно страшно, что у вас есть эти нулевые проверки с исключениями. Вместо этого напишите тест интеграции, который проверяет, имеет ли каждая команда в системе соответствующий обработчик команд. Это позволяет вам уведомлять ваши тесты, а не во время выполнения. Гораздо безопаснее. – Steven
Кстати, что случилось с этим ужасным, если чек? '(! ((handler! = null) && handler! = null))'. Это переработанный сложный способ выполнения 'if (handler == null)'. – Steven