【问题标题】:NHibernate proxies prevent Castle.Validator component to do it's jobNHibernate 代理阻止 Castle.Validator 组件完成它的工作
【发布时间】:2009-03-26 23:05:33
【问题描述】:

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

我尝试使用 Inherited = true 定义验证属性,而 Castle.Validator runner 使用以下语句获取 em:

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

所以它应该从我的实体中获取属性,而它们在技术上是正在验证的对象(代理)的基类?为什么它不起作用? GetCustomAttribute 总是返回空数组。

【问题讨论】:

    标签: .net nhibernate validation reflection castle


    【解决方案1】:

    同样的事情也发生在我身上。问题是 NHibernate 在创建代理时不继承属性。 我发现的只是这个forum post,其中问题被识别并给出了一个简单的 解决方法(只是在验证时不要使用代理),这就是我最终要做的。

    我可以推荐这个验证库:Fluent Validation,我还没有使用它,但我打算使用它,主要是因为我厌倦了使用属性(因为这样的问题)。

    【讨论】:

      【解决方案2】:

      属性很好,因为它们确实是领域模型的一部分。

      我想我找到了问题的解决方案。我已经修补了 Castle.Validator 这样做的想法。这太疯狂了,但是这段代码:

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

      返回空数组,而在我看来完全等效的代码返回属性:

      System.Attribute.GetCustomAttributes(property);
      

      @#$% 是什么?

      【讨论】:

        猜你喜欢
        • 2012-06-26
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        相关资源
        最近更新 更多