6

質問

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として扱っているようです。objectUserModel


質問

Validation Application BlockのValidation.Validate()メソッドに、Unity が提供する の各パラメーターをIParameterCollection私のカスタムとして表示させることは可能UserModelですか?

4

1 に答える 1

2

クラスのValidationFactory代わりに使用する必要があります。Validationこの行を置き換える場合:

var results = Validation.Validate(parameter);

次の行で、それを機能させることができます。

var results =
    ValidationFactory.CreatValidator(parameter.GetType())
        .Validate(parameter);

幸運を。

于 2010-04-01T19:35:04.527 に答える