Вопрос
Возможно ли, чтобы метод Validation.Validate()
блока приложения валидации видел каждый параметр IParameterCollection
, предоставленный Unity, как мой пользовательский UserModel
?
Справочная информация:
Я пытаюсь использовать как Unity, так и блок приложения проверки для проверки параметров метода.
Я хотел бы иметь возможность обозначить метод как [RequiresValidation()]
и параметры этого метода с соответствующими атрибутами проверки.
Итак, как-то так:
[RequiresValidation()]
public void SaveUser(UserModel user)
{
// ...
}
public class UserModel
{
[StringLengthValidator(3, 255)]
[RegexValidator(@"^[a-zA-Z0-9]${3,255}")]
public string Name { get; set; }
[StringLengthValidator(0, 255)]
[RegexValidator(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")]
public string EMail { get; set; }
}
Я создал собственный атрибут HandlerAttribute, который будет инициировать вызов обработчика проверки, как показано.
public class RequiresValidationAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return new ValidationCallHandler();
}
}
Теперь обработчик проверки попытается проверить каждый параметр метода:
public class ValidationCallHandler : ICallHandler
{
public int Order { get; set; }
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
// Validate the method parameters
ValidateArguments(input.Arguments);
// Call the method that was intercepted
return getNext()(input, getNext);
}
private static void ValidateArguments(IParameterCollection parameterCollection)
{
foreach (var parameter in parameterCollection)
{
var results = Validation.Validate(parameter);
if (results.IsValid) continue;
// ...
}
// ...
}
}
Проблема
Метод Validation.Validate()
всегда возвращает true . Судя по моим наблюдениям, логика проверки трактует parameter
как object
, а не как UserModel
.
Вопрос
Возможно ли, чтобы метод Validation.Validate()
блока приложения валидации видел каждый параметр IParameterCollection
, предоставленный Unity, как мой пользовательский UserModel
?