postharp

时间:2018-04-05 14:15:40

标签: postsharp

我通过使用[NotifyPropertyChanged]属性修饰我的业务类来使用PostSharp解决方案来实现INotifyPropertyChanged。

一切正常。

现在我编写了一个处理属性更改的自定义方面,以便在某些特殊属性更改时设置一些自定义标志。这些方面名为[HandlePropertyChanged],单独使用时可以使用。

现在我尝试组合使用这两个方面。当我在PostSharp页面上阅读时,我可以手动命令它们以确保使用

固定订单
  [NotifyPropertyChanged(AspectPriority = 0)]
  [HandlePropertyChanged(AspectPriority = 1)]

在这种情况下,我可以构建我的解决方案,但因为" NotifyPropertyChanged"在" HandlePropertyChanged"之前运行,我的属性上的更改已经完成,自定义逻辑无法正常运行。

如果我试试这个

  [HandlePropertyChanged(AspectPriority = 0)]
  [NotifyPropertyChanged(AspectPriority = 1)]

我的版本因文本底部的错误而失败(见下文)。

最好是简单地执行NotifyPropertyChanged在我的自定义方面所做的事情而忘记PostSharp方面

这可能吗?

0:错误C:\ Source \ WAVE \ WAVE.Data.Contracts \ Entities \ Base \ EntityBase.cs(17,16)PS0115:" TopMotive.WAVE.Data.Contracts.Entities上的冲突方面。 Base.EntityBase`1":根据方面的依赖关系,转换"方面的实例化PostSharp.Patterns.Model.NotifyPropertyChangedAttribute"应该在转换之前和之后定位"实例化字段的绑定集合" PostSharp.Patterns.Model.NotifyPropertyChangedAttribute / LocationBindings"。"。

2 个答案:

答案 0 :(得分:0)

此错误已在PostSharp 5.0.52和PostSharp 6.0.16 RC中修复。

答案 1 :(得分:0)

尝试高级免费的替代方法:Stepen Cleary的计算属性。 https://github.com/StephenCleary/CalculatedProperties/blob/master/README.md

我在生产中都使用了它,发现它比PostSharp的方面要好得多。

也来自PostSharp文档:

“如果属性获取器从其类或委托中调用虚拟方法,或引用另一个对象的属性(不使用规范形式this.field.Property),则PostSharp将生成错误,因为它无法解决此类依赖关系当您的属性获取器包含复杂的数据流(例如,循环或对其他类的方法(属性获取器除外))的调用时,也会受到相同的限制。 发生这种情况时,您可以重构代码,以便PostSharp可以自动对其进行分析,或者您可以承担分析代码的责任。

这些限制均不适用于计算属性。它可以对对象执行循环,虚拟方法,LINQ,基本上可以想象到的任何运行时依赖关系都与间接无关。依赖图在运行时会自动重新连接,并且无需任何仪式即可工作。他们也很快。