通过使用NotifyPropertyChanged属性修饰我的业务类,我正在使用针对INotifyPropertyChanged的PostSharp解决方案。
一切正常。
现在,我编写了一个处理属性更改的自定义方面,以便在某些特殊属性更改时设置一些自定义标志。这个方面被命名为HandlePropertyChanged,单独使用时可以工作。
现在,我尝试将这两个方面结合使用。正如我在PostSharp页面上看到的那样,我可以使用以下命令手动对它们进行排序,以确保固定的顺序
[NotifyPropertyChanged(AspectPriority = 0)]
[HandlePropertyChanged(AspectPriority = 1)]
在这种情况下,我可以构建我的解决方案,但是因为"NotifyPropertyChanged“在"HandlePropertyChanged”之前运行,所以对我的属性的更改已经完成,并且自定义逻辑不能正确运行。
如果我尝试这样做
[HandlePropertyChanged(AspectPriority = 0)]
[NotifyPropertyChanged(AspectPriority = 1)]
我的构建失败,并在文本的bottm处出现错误(见下文)。
最好的方法是简单地在我的自定义方面中执行NotifyPropertyChanged所做的事情,而忘记PostSharp方面
这个是可能的吗?
0: Error C:\Source\WAVE\WAVE.Data.Contracts\Entities\Base\EntityBase.cs (17,16) PS0115:根据方面依赖关系,转换“在转换之前和之后都应定位方面PostSharp.Patterns.Model.NotifyPropertyChangedAttribute”的实例化“实例化字段"PostSharp.Patterns.Model.NotifyPropertyChangedAttribute/LocationBindings".".的绑定集合
发布于 2018-06-26 00:39:56
此错误已在PostSharp 5.0.52和PostSharp 6.0.16 RC中修复。
发布于 2019-04-03 15:51:05
尝试更好的和免费的替代方案: Stepen Cleary的计算属性。https://github.com/StephenCleary/CalculatedProperties/blob/master/README.md
我在生产中使用了这两种方法,并发现它比PostSharp的方面要好得多。
同样来自PostSharp文档:
如果属性获取方法从其类或委托调用虚方法,或引用另一个对象的属性(不使用规范形式的this.field.Property),PostSharp将生成错误,因为它无法在生成时解析此类依赖项。当属性获取方法包含复杂的数据流(如循环)或对其他类的方法(属性获取方法除外)的调用时,同样的限制也适用。发生这种情况时,您可以重构代码,以便PostSharp可以自动分析它,或者您可以接管分析代码的责任
这些限制都不适用于计算特性。它可以做循环,虚方法,LINQ to objects,基本上任何你能想象到的运行时依赖关系,不管有多间接。依赖关系图在运行时重新连接自身,并且不需要任何仪式就可以工作。它们的速度也很快。
https://stackoverflow.com/questions/49674592
复制相似问题