2015-05-29 17 views
5

Używam PostSharp Express w VS2013 do tworzenia aspektów sprawdzania poprawności, które mogę zastosować do moich właściwości. Poszłam za this PostSharp guide on location interception. Wszystkie one działają dobrze, ale ja dostaję setki ostrzeżenia stwierdzające:PostSharp Conflicting Aspects warning

Sprzeczne aspekty na „MyNamespace.get_MyProperty”: transformacje „.MyValidation1Attribute: przechwycona przez doradztwo OnGetValue, OnSetValue” i „MyNamespace.Validation2Attribute: przechwycona przez doradztwo OnGetValue, OnSetValue "nie są przemienne, ale nie są one silnie zamówione . Ich kolejność realizacji jest nieokreślona.

Co moim zdaniem jest wynikiem umieszczenia wielu aspektów sprawdzania poprawności na tych samych właściwościach. Najpierw próbowałem przecinać atrybuty, które, jak rozumiem, mają je zamawiać: [Validation1,Validation2], ale ostrzeżenia pozostały.

Ponieważ moje aspekty są przemienne (to nie ma znaczenia w jakiej kolejności są realizowane), the PostSharp docs advise oznaczyć je jako takie za pomocą AspectTypeDependency następująco:

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

Jednak wydaje się, że nie ma nazw PostSharp.Aspects.Dependencies zawarte w licencji Express. Czy istnieje możliwe rozwiązanie tych ostrzeżeń za pomocą licencji Express? Czy to znaczy, że nie mogę użyć więcej niż jednego aspektu bez kupowania pro lub ostatecznego? Byłbym skłonny spróbować wdrożyć mój własny kontroler zależności, gdybym mógł usunąć te ostrzeżenia w ten sposób.

Odpowiedz

5

AspectTypeDependency wymaga profesjonalnej edycji. Jednak typ AspectTypeDependency powinien być uwzględniony nawet w wersji Express - powinien wtedy zostać użyty błąd czasu instalacji oprogramowania bez licencji.

Można użyć AspectPriority:

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

Alternatywnie można przypisać priorytet w konstruktorze kształtu. Jest znacznie mniej elastyczny niż zamawianie aspektu, ale przynajmniej rozwiązuje ostrzeżenie.

+0

Dziękujemy, dodając AspectPriority do każdego sprawdzania poprawności działa! – Ivan

Powiązane problemy