У меня возникли проблемы с работой моих валидаторов FluentValidation с Simple Injector.
У меня есть декоратор с конструктором:
public CommandHandlerValidationDecorator(
IRequestHandler<TRequest, TRepsonse> innerHandler,
IValidator<TRequest>[] validators)
{
_decoratedHandler = innerHandler;
_validators = validators;
}
Проблема связана со вторым параметром, IValidator<TRequest>[] validators
.
Руководствуясь сообщениями об ошибках, которые я получал, я выполнил настройку следующим образом:
container.Register(typeof(FluentValidation.IValidator<>), new[] { assembly });
container.RegisterCollection(typeof(FluentValidation.IValidator<>), new[] { assembly });
container.Register(typeof(IRequestHandler<,>),new [] { assembly });
container.RegisterDecorator(typeof(IRequestHandler<,>),
typeof(CommandHandlerValidationDecorator<,>));
Это работало нормально, пока я не изменил область действия для каждого веб-запроса:
container.Register(typeof(FluentValidation.IValidator<>), new[] { assembly },
Lifestyle.Scoped);
container.RegisterCollection(typeof(FluentValidation.IValidator<>), new[] { assembly });
container.Register(typeof(IRequestHandler<,>),new [] { assembly }, Lifestyle.Scoped);
container.RegisterDecorator(typeof(IRequestHandler<,>),
typeof(CommandHandlerValidationDecorator<,>), Lifestyle.Scoped);
Похоже, что вы не можете использовать RegisterCollection для каждого веб-запроса, и это становится проблемой, потому что возникает исключение из-за несоответствия образа жизни:
Дополнительная информация: Обнаружено несоответствие образа жизни. CommandHandlerValidationDecorator (веб-запрос) зависит от IValidator[] (переходный). Несоответствие образа жизни может вызвать ошибки параллелизма в вашем приложении. См. https://simpleinjector.org/dialm, чтобы понять эту проблему и способы ее решения.
Возможно, я пытаюсь заставить что-то, что является плохой практикой?
IEnumarable<IValidator<TRequest>>
, и все в порядке. - person Steven   schedule 01.05.2016