| 

.NET C# Java Javascript Exception

3
Hallo,

jeder kennt wahrscheinlich das ConditionalAttribute (http://msdn.microsoft.com/de-de/library/system.diagnostics.conditionalattribute.aspx). Mit diesem lässt sich per #define Konstanten steuern ob eine Methode aufgerufen wird oder nicht.

Ich möchte so ein Attribute nachbauen um Benutzerabhängig Methoden aufzurufen, komme aber irgendwie nicht weiter.

Aussehen soll es mal so:
[Access("Administrator")]
void IrgendeineMethode()
{
}

Mittels des Attributes soll in einer Datenbank überprüft werden ob der aktuell angemeldete Benutzer die Role Administrator hat. Wenn ja dann soll die Methode normal aufgerufen werden, wenn nein dann soll der Methodenaufruf einfach übersprungen werden.

Ich habe schon viel gesucht und bin dabei auf so Stichwörter wie AOP (Aspect-oriented programming) gestossen.
Im Projekt gibt es die Möglichkeit Unity 2.0 einzusetzen. Auch hier habe ich schon geforscht und bin in Richtung Interceptors gegangen. Hatte aber bisher keinen Erfolg.

Hoffe es kann mir hier jemand weiterhelfen.
Ein kleines Beispiel oder Codeausschnitte wären toll.
10.02.2011
schulz3000 390 1 6
2 Antworten
2
Interessanterweise hat stackoverflow ein Beispiel mit AOP und Postsharp zu genau deiner Frage.

btw: Der Unterschied zwischen dem ConditionalAttribute und deinem Anliegen ist, dass mittels ConditionalAttribute und der Compiler Direktive #define der Compiler angewiesen wird, bestimmte Teile zu compilieren oder nicht.

Zur Laufzeit fällt mir auch nur AOP ein. Der Aspekt (= die Implementierung hinter dem Attribut) wird im Fall von Postsharp ebenfalls zur Compilezeit in das Executable integriert. Es gibt auch andere Methoden, mehr zu AOP in Wikipedia.
10.02.2011
Maria Simlinger 1,1k 1 9
Habe das mit Unity umsetzen können. Das Postsharp Beispiel hat mir da sehr weitergeholfen. Danke.
schulz3000 22.04.2011
1
Hört sich tatsächlich nach einem Fall für AOP (z.B. PostSharp) an. Das ConditionalAttribute hat damit allerdings nichts zu tun: Es ist ausschließlich innerhalb des C# Compilers implementiert.
10.02.2011
alexander 860 2 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH