我在VS2013中使用PostSharp Express来创建可以应用于我的属性的验证方面。我跟着this PostSharp guide on location interception。他们都运作良好,但我收到了数百条警告:
" MyNamespace.get_MyProperty":转换方面的冲突方面 " .MyValidation1Attribute:通过建议OnGetValue拦截, OnSetValue"和" MyNamespace.Validation2Attribute:截获者 建议OnGetValue,OnSetValue"不是可交换的,但它们不是 强烈要求。他们的执行顺序是不确定的。
我认为这是我在同一属性上放置多个验证方面的结果。首先,我尝试用逗号分隔属性,我理解应该对它们进行排序:[Validation1,Validation2]
但警告仍然存在。
由于我的方面是可交换的(它们执行的顺序并不重要),the PostSharp docs advise使用AspectTypeDependency标记它们如下:
[AspectTypeDependency(AspectDependencyAction.Commute, typeof(ILocationValidationAspect))]
但是,似乎PostSharp.Aspects.Dependencies
命名空间不包含在Express许可证下。是否有任何可能的解决方案仅使用Express许可解决这些警告?或者这是否意味着我不能在不购买专业版或终极版的情况下使用多个方面?如果我能以这种方式删除这些警告,我愿意尝试实现我自己的依赖控制器。
答案 0 :(得分:6)
AspectTypeDependency需要专业版。但是即使在Express版本中也应该包含AspectTypeDependency类型 - 那么应该使用非许可的功能构建时错误。
您可以使用AspectPriority:
[Validation1(AspectPriority = 1), Validation2(AspectPriority = 2)]
或者,您可以在方面构造函数中指定优先级。它比方面排序灵活得多,但至少它解决了警告。