2009-04-23 3 views
2

Ich habe eine Klasse:Führen Sie einen bestimmten Code vor Elementfunktionen einer Klasse mit Attributen aus?

public class MyClass 
{ 
    public int code { set; get; } 
    public bool foo() 
    { 
    // do some stuff 
    // ... 
    code = 100; 
    return true; 
    } 

    public bool bar() 
    { 
    // do some stuff 
    // ... 
    code = 200; 
    return true; 
    } 

    // more methods ... 
    // ... 
} 

Ich mag würde den Wert des Codes auf Null zu Beginn eines jeden Mitglieds Funktionsaufruf zurückzustellen. Natürlich kann ich den Wert manuell auf Null am Anfang jeder Funktion gesetzt, aber ich frage mich, ob es möglich ist, zu diesem Zweck Attribute zu verwenden:

[ResetTheCode] 
public bool bar() 
{ 
    // do some stuff 
    // ... 
    code = 200; 
    return true; 
} 

Etwas Ähnliches Aktion Filter in ASP.NET MVC. Ist das möglich?

Antwort

1

Sie könnten definitiv so etwas mit einem AOP-Framework (wie PostSharp) tun, aber denken Sie nicht, dass das für jemanden, der mit Ihrem Prozess nicht vertraut ist, ziemlich verwirrend wäre?

Dies ist eines dieser Dinge, die, obwohl Sie es tun können, bedeutet nicht unbedingt, dass Sie sollten. Der Zeitaufwand für das Eingeben des Attributnamens über die Methode kann nicht geringer sein als der Zeitaufwand zum Schreiben des Rücksetzcodes (der ebenfalls in einer eigenen Methode enthalten sein sollte, damit Sie nicht überall eine magische Zahl kopieren/einfügen)).

3

Einverstanden mit Kent. Schauen Sie sich auch PostSharp an, das ebenfalls ein sehr ausgereiftes .NET AOP Framework ist.

0

Attribute an und für sich selbst tun nichts, außer arbeiten wie ein Marker oder Metadaten zu Ihrem Code. Sie müssten etwas Reflexionscode schreiben, um das Attribut zu erhalten und etwas damit zu tun.

Ein AOP-Framework wie PostSharp, Castle Windsor und andere macht die Arbeit der Auswertung von Attributen basierend auf den Regeln des Frameworks.

Verwandte Themen