我使用Castle.Validator组件遇到了NHibernate代理验证的问题。看起来验证器无法从实体代理的属性中获取属性。
我尝试使用Inherited = true定义验证属性,而Castle.Validator运行器使用以下语句获取em:
property.GetCustomAttributes(typeof(IValidatorBuilder), true);
所以它应该从我的实体获取属性,而它们在技术上是验证对象(代理)的基类?为什么它不起作用? GetCustomAttribute总是返回空数组。
答案 0 :(得分:2)
同样的事发生在我身上。问题是NHibernate在创建代理时不会继承属性。 我发现的只有forum post,其中的问题得到了认可并且简单明了 解决方法(在验证时不要使用代理)这就是我最终要做的事情。
我可以推荐这个验证库:Fluent Validation,我还没有使用它,但我打算这样做,主要是因为我厌倦了使用属性(因为这样的问题)。
答案 1 :(得分:0)
属性很好,因为它们确实是域模型的一部分。
我想我找到了问题的解决方案。我修补了Castle.Validator这样想。这太疯狂了,但这段代码:
property.GetCustomAttributes(true /*inherit*/);
返回空数组,而在我看来,完全等效的代码返回属性:
System.Attribute.GetCustomAttributes(property);
@#$%是什么?