0

関連するエンティティとFormPartBに依存するオブジェクトのビジネスルールがいくつかあります。FluentValidationは初めてです。LicenseeFormPartA

私がやりたいことは(私が思うに):

  • 私の中で、エンティティとエンティティを1回FormPartBValidator取得してから、それらの関連オブジェクトの値を使用するための一連のルール(つまり述語)を設定します。LicenseeFormPartAMust()FormPartB

  • つまり、各ルール定義内で両方の外部エンティティを再度フェッチしたくありません。

私はいくつかの考えを持っていました:

(1)バリデーターのコンストラクターで、私のRuleFor定義の上にあるこれらのエンティティを取得し、それらのエンティティをプライベートフィールドとして保存します。

public PartBValidator()
{
    // Get my external data and save as private fields

    RuleFor...
    RuleFor...
}

また

(2)Validate()の呼び出し内でこれらのエンティティを取得し、それらのエンティティをプライベートフィールドとして保存します。

public override ValidationResult Validate(FormPartB instance)
{
    // Get my external data and save as private fields

    return base.Validate(instance);
}

でも

  • オプション(1)でFormPartBインスタンスにアクセスできないようです

  • オプション(2)では、Validate()が思ったように機能していないようです(つまり、のすべての検証で呼び出されないようFormPartBです)。

  • そして、「オブジェクトを取得してプライベートフィールドとして保存する」が正しい方法であるかどうかさえわかりません。

何かアドバイス?

4

1 に答える 1

4

私はこれをアプリケーションで依存関係によって処理しました-検証が依存しているデータを取得するコンストラクターにサービスを注入し、それは非常にうまく機能しました。

次に例を示します。

private readonly IFormService _service;

public PartBValidator(IFormService service)
{
    _service = service;

    var valueICareAbout = _service.GetMeFormAData();

    RuleFor...  // uses valueICareAbout
    RuleFor...
}

ルール定義内のサービスを介してそのデータを取得することによるパフォーマンスへの影響が懸念される場合は、いくつかのキャッシュオプションも検討できます。

于 2012-02-08T02:52:08.467 に答える