6

より多くのアクションオブジェクトのコレクションを持つアクションクラスがあります。このようなもの:

public class Action
{
    ICollection<Action> SubActions;
}

これは基本的にツリー構造を形成します(サイクルがないことを確認します)。Fluent Validationを使用して、このクラスのバリデーターを作成しました。これが私のバリデーターの試みです:

public class ActionValidator : AbstractValidator<Action>
{
    public ActionValidator()
    {
        RuleFor(x => x.SubActions).SetCollectionValidator(new ActionValidator());
    }
}

ActionValidatorに依存するものを解決しようとすると、Unityが爆発します。より具体的には、LINQPadは、おそらくスタックオーバーフローから、ActionValidatorに依存するサービスを解決しようとするとクラッシュします。

私が検証しているActionクラスには他のメンバーがいますが、簡潔にするために重要な部分を置いただけです。ここにリストしたルールをコメントアウトすると、正常に機能します(サブアクションを検証しなくなった場合を除く)。

私は自分のアプローチに問題があります。何かが死ぬまで、バリデーターを再帰的に構築しています。しかし、この方法でサブオブジェクトを検証するようにFluentValidationに指示する方法がわかりません。

4

1 に答える 1

14

同じタイプを検証するルールを次のように変更します。

Rulefor(x => x.SubActions).SetCollectionValidator(this);
于 2011-08-18T15:26:24.407 に答える