2

これは非常に単純な質問ではありませんが、誰かがこの質問に出くわしたことを願っています。

私は次のことを一緒に働かせようとしています:

  1. MVC2
  2. FluentValidation
  3. エンティティ フレームワーク 4.0 (POCO)
  4. ウィンザー城

私はほとんどすべてが機能するようになりました。Castle Windsor を実装し、MVCContrib の一部である WindsorControllerFactory によって提供されるコントローラーを操作します。また、次の記事で説明されているように、Castle が FluentValidation バリデーターを提供しています。

ビューで Html.EditorForModel または EditorFor を使用しようとすると、問題が発生します。これを実行しようとすると、次のエラー メッセージが表示されます。

サービス FluentValidation.IValidator`1 をサポートするコンポーネントがありません

これは、Entity Framework 4.0 で POCO 生成を使用しているためです。実行時に、生成されたクラスは動的プロキシでラップされるため、追跡と遅延読み込みが発生します。どうやら、EditorForModel または EditorFor を使用する場合、Windsor に基になる実タイプの代わりに動的プロキシ タイプのバリデータを作成するように要求しようとします。

この問題を解決するために私に何ができるか知っている人はいますか?

4

2 に答える 2

3

クラスプロキシの正しいバリデータークラスを返すカスタム FluentValidatorFactory を作成することをお勧めします。

于 2010-05-21T03:55:13.497 に答える
3

これは私の ValidatorFactory の CreateInstance メソッドです。より良い方法があれば、コメントしてください。

    public override IValidator CreateInstance( Type validatorType)
    {
        if( validatorType.GetGenericArguments()[0].Namespace.Contains( "DynamicProxies" ) )
        {
            validatorType = Type.GetType( String.Format( "{0}.{1}[[{2}]], {3}", validatorType.Namespace, validatorType.Name, validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName, validatorType.Assembly.FullName ) );

        }

        return ResolveType.Of( validatorType ) as IValidator;
    }
于 2010-05-21T21:54:58.790 に答える