Wie überprüfe ich, ob die Methode ein Attribut hat (mit Interfaces, Casting und Abstract)?

8

Nach dem Lesen des Posts " Wie überprüft man, ob die Methode ein Attribut hat? "Ich bin ein Schritt, um ein Problem zu lösen, das mich wach hält.

Ich stelle die Situation vor:

(Ich arbeite mit ASP.Net MVC 4)

Diese Schnittstellen :

%Vor%

Diese abstrakte Klasse :

%Vor%

Dieser Controller:

%Vor%

Diese abstrakte Klasse (für Tests)

%Vor%

Und schließlich hat diese Klasse von SuperHeroTest geerbt, um SuperManController zu testen:

%Vor%

Methode MethodHasAuthorizeAttribute ist: (aus dem obigen Beitrag)

%Vor%

Mein Problem ist:

Der Aufruf MethodHasAuthorizeAttribute(() => superHeroFlyable.Fly()) in SuperHeroTest gibt false zurück, wenn true zurückgegeben werden soll.

(Die implementierte Methode Fly in Klasse SuperManController hat das Attribut Authorize ).

Ich habe das Attribut Authorize in der Methode Fly in IFlyable hinzugefügt und dann true zurückgegeben.

%Vor%

Wie kann ich erreichen, dass MethodHasAuthorizeAttribute die Implementierung und nicht die Schnittstelle überprüft?

    
Sebastián Guerrero 30.09.2012, 05:40
quelle

1 Antwort

9

Mit einigen Änderungen an der IfSuperHeroCanFlyMustHaveAuthorizeAttribute () -Methode können Sie es zum Laufen bringen.

Überprüfen Sie zuerst, ob Ihr Controller die IFlyable-Schnittstelle implementiert. Wenn ja, rufen Sie die MethodInfo für die Fly-Methode des Controllers ab. Dann müssen Sie nur die Attribute für die zurückgegebene MethodInfo überprüfen. Auf diese Weise prüfen Sie, ob die Implementierung das Attribut anstelle der Schnittstelle hat.

Folgendes funktioniert OK:

%Vor%     
Christophe Geers 30.09.2012, 09:20
quelle