【发布时间】:2018-04-05 14:15:40
【问题描述】:
我正在通过使用 [NotifyPropertyChanged] 属性装饰我的业务类来为 INotifyPropertyChanged 使用 PostSharp 解决方案。
一切正常。
现在我编写了一个处理属性更改的自定义方面,以便在某些特殊属性更改时设置一些自定义标志。这个方面被命名为 [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 模型库中包含的 NotifyPropertyChanged 方面非常复杂,完全重新实现它可能不经济。我相信首先寻找方面排序的解决方案是值得的。您的 HandlePropertyChanged 方面是什么样的?你在使用位置拦截吗?还有其他建议吗?最好有一个示例来演示该问题。
-
是的,我正在使用位置拦截,这可能导致了问题。只是为了确保:是否有机会获得 NotifyPropertyChanged 的源代码?也许我可以在那里添加我的东西......
-
PostSharp 团队调查了 NPC 方面排序问题并提交了相应的内部错误。一旦错误修复,我们将通知您。同时,您可以尝试使用方面依赖项而不是 AspectPriority 来对方面进行排序 (doc.postsharp.net/aspect-dependencies)。
标签: postsharp