postharp中的碰撞方面

问题描述 投票:0回答:2

我通过使用[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“。”。

postsharp
2个回答
0
投票

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


0
投票

尝试优越和免费的替代方案:Stepen Cleary的计算属性。 https://github.com/StephenCleary/CalculatedProperties/blob/master/README.md

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

同样来自PostSharp文档:

“如果属性getter从其类或委托调用虚方法,或引用另一个对象的属性(不使用规范形式this.field.Property),PostSharp将生成错误,因为它无法在构建时解析这种依赖当您的属性getter包含复杂的数据流(如循环)或对其他类的方法(属性获取者除外)的调用时,同样的限制也适用。当发生这种情况时,您可以重构代码,以便PostSharp自动分析它,或者你可以接管分析代码的责任“

这些限制均不适用于计算属性。它可以做循环,虚方法,LINQ到对象,基本上你可以想象的任何运行时依赖都无关紧要。依赖图在运行时重新连接,只是在没有任何仪式的情况下工作。它们也很快。

© www.soinside.com 2019 - 2024. All rights reserved.