2015-05-29 13 views
5

Ich verwende PostSharp Express in VS2013, um Validierungsaspekte zu erstellen, die ich auf meine Eigenschaften anwenden kann. Ich folgte this PostSharp guide on location interception. Sie alle arbeiten gut, aber ich bin immer Hunderte von Warnungen besagt:PostSharp widersprüchliche Aspekte Warnung

Widersprüchliche Aspekte auf „MyNamespace.get_MyProperty“: Transformationen „.MyValidation1Attribute: Abgefangen durch Beratung OnGetValue, OnSetValue“ und „MyNamespace.Validation2Attribute: Abgefangen durch Hinweis OnGetValue, OnSetValue "sind nicht kommutativ, aber sie sind nicht stark geordnet. Ihre Reihenfolge der Ausführung ist unbestimmbar.

Was ich denke, ist ein Ergebnis meiner mehrere Validierung Aspekte auf die gleichen Eigenschaften. Zuerst habe ich versucht, die Attribute zu trennen, von denen ich verstehe, dass sie sie anordnen sollen: [Validation1,Validation2] aber die Warnungen blieben noch.

Da meine Aspekte kommutativ sind (es spielt keine Rolle, in welcher Reihenfolge sie ausgeführt werden), the PostSharp docs advise sie als solche markieren AspectTypeDependency wie folgt verwendet:

[AspectTypeDependency(AspectDependencyAction.Commute, typeof(ILocationValidationAspect))] 

Es scheint jedoch, dass der PostSharp.Aspects.Dependencies Namespace ist nicht in der Express-Lizenz enthalten. Gibt es eine mögliche Lösung, um diese Warnungen nur mit der Express-Lizenz zu lösen? Oder bedeutet das, dass ich niemals mehr als einen Aspekt nutzen kann, ohne Pro oder Ultimate zu kaufen? Ich würde gerne versuchen, meinen eigenen Abhängigkeitscontroller zu implementieren, wenn ich diese Warnungen auf diese Weise entfernen könnte.

Antwort

5

AspectTypeDependency erfordert Professional Edition. Der AspectTypeDependency-Typ sollte jedoch auch in der Express-Edition enthalten sein - es sollte dann ein nicht lizenzierter Feature-Build-Zeitfehler verwendet werden.

können Sie AspectPriority verwenden:

[Validation1(AspectPriority = 1), Validation2(AspectPriority = 2)] 

Alternativ können Sie die Priorität in Aspekt Konstruktor zuweisen. Es ist viel weniger flexibel als die Reihenfolge der Aspekte, aber es löst zumindest die Warnung.

+0

Vielen Dank, Hinzufügen von AspectPriority zu jeder Validierung funktioniert! – Ivan

Verwandte Themen