質問
Validation Application BlockのValidation.Validate()
メソッドに、Unity が提供する の各パラメーターをIParameterCollection
私のカスタムとして表示させることは可能UserModel
ですか?
バックグラウンド:
Unity と Validation Application Block の両方を使用してメソッド パラメーターを検証しようとしています。
[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を返します。私の観察によると、検証ロジックは をmy ではなくparameter
として扱っているようです。object
UserModel
質問
Validation Application BlockのValidation.Validate()
メソッドに、Unity が提供する の各パラメーターをIParameterCollection
私のカスタムとして表示させることは可能UserModel
ですか?