0

Castle.Validator コンポーネントを使用した NHibernate プロキシ検証で問題が発生しました。バリデータがエンティティ プロキシのプロパティから属性を取得できなかったようです。

Inherited = true を使用して検証属性を定義しようとしましたが、Castle.Validator ランナーは次のステートメントを使用して em をフェッチします。

property.GetCustomAttributes(typeof(IValidatorBuilder), true);

したがって、エンティティから属性を取得する必要がありますが、技術的には検証中のオブジェクト (プロキシ) の基本クラスですか? なぜ機能しないのですか?GetCustomAttribute は常に空の配列を返します。

4

2 に答える 2

2

同じことが私にも起こりました。問題は、プロキシの作成時に NHibernate が属性を継承しないことです。私が見つけたのはこのフォーラムの投稿で、問題が認識され、簡単な回避策が提供されています (検証時にプロキシを使用しないでください)。

この検証ライブラリをお勧めします: Fluent Validation、まだ使用していませんが、主に属性の使用にうんざりしているため (このような問題のため)、使用する予定です。

于 2009-03-26T23:38:51.220 に答える
0

属性は本当にドメイン モデルの一部であるため、問題ありません。

問題の解決策を見つけたと思います。私はCastle.Validatorにパッチを当ててそう考えました。非常識ですが、このコードは次のとおりです。

property.GetCustomAttributes(true /*inherit*/);

空の配列を返しますが、私の謙虚な意見では、完全に同等のコードが属性を返します。

System.Attribute.GetCustomAttributes(property);

@#$​​% とは?

于 2009-03-27T00:10:39.130 に答える