2011-10-18 10 views
5

私は流暢な検証とninjectを使用してASP.NET MVC3 Webサイトのセットアップを行っています。検証コードが動作しています。しかし、検証クラスのコンストラクタにブレークポイントを設定し、検証を使用するビューをリクエストすると、コンストラクタが複数回ヒットすることに気付きました。非常に基本的なテストに基づいて、コンストラクタがヒットした回数は、オブジェクトに存在するプロパティの数に等しいと思われます。他の誰かが似たようなものを見つけましたか?あるいは、このタイプのバリデーションがどのように裏で働いているかについて、より多くの洞察を得ることができますか?ここでASP.NET MVC3 Fluent Validationコンストラクターがリクエストごとに複数回ヒットする

を-Thanksがコンストラクタです...ここで

public class PersonValidator : AbstractValidator<Person> { 
    public PersonValidator() { 
     RuleFor(x => x.Id).NotNull(); 
     RuleFor(x => x.Name).Length(0, 10); 
     RuleFor(x => x.Email).EmailAddress(); 
     RuleFor(x => x.Age).InclusiveBetween(18, 60); 
    } 
} 

は、私が使用しているライブラリ/リソースが(私はNuGetパッケージと下の2つのリンクからの情報に基づいて構成されたすべてのものを得ました)です:

http://fluentvalidation.codeplex.com/wikipage?title=mvc https://github.com/ninject/ninject.web.mvc.fluentvalidation

+0

おもしろい質問、あなたが(x => x.Id)を呼び出すとどういうことが起こっているのか分かりますか?私はまだLINQ式に新しくなっていますが、これはあなたの問題に関係するかもしれないと思います –

+0

@CodeRush 'RuleFor(x => x.Id)'は 'Person x'の' Id'プロパティのルールを作ることを意味します。 @Zoranどのようにバリデータを設定していますか? – shuniar

+0

私はLinqに精通しており、流暢なAPIをEFコードファーストで使用しています。 @ shuniar - サイトの設定に使用したウェブサイトへのリンクを追加しました。私は実際にすべてのステップを実行することはできませんが、手順に従うことで作業の有効性を確認したと言えるでしょう。私はちょうどそのコードが何度もヒットするのを知りたいのです。それは私が少し心配している。 :) – Zoran

答えて

4

私はこの問題を回避する方法を考え出しました。これが私の問題を解決するにもかかわらず、私は他人からのインプットに、これを行う際に何らかの結果があるかどうかを尋ねます。

したがって、2番目のリンクでは、Ninjectの設定方法が表示されます。

2番目の手順では、「InRequestScope()」の拡張方法を適用する必要があります。その後、コンストラクタは、バリデータを使用するhttp要求ごとに1回だけヒットします。つまり、httpリクエストごとにバリデータオブジェクトのインスタンスが1つしか作成されないということです。このソリューションを使用することに何らかの影響があるかどうかはわかりません。

Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope(); 
関連する問題