0

我遇到了使用 Castle.Validator 组件进行 NHibernate 代理验证的问题。看起来验证器无法从实体代理的属性中获取属性。

我尝试使用 Inherited = true 定义验证属性,而 Castle.Validator runner 使用以下语句获取 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 回答