2016-03-22 4 views
0

In einer Klassenbibliothek versuche ich, Ausnahme mit Attributen in der Klassenbibliothek umzugehen. Gibt es einen Weg, auf AOP (PostSharp) zu verzichten?Behandeln Sie Ausnahme in Klassenbibliothek mit Attribut

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public class HandleError : Attribute 
{ 

    public void OnException(){ 
    try { 

    } 
    catch (Exception) { 

    }} 
} 

Und ich möchte Attribut wie dieses dekorieren.

[HandleError] 
public void SampleMethod() 
{ 
    throw new Exception(); 
} 
+1

Sie sind dabei, die Reflection Gun zu nehmen und zielen auf Ihren Fuß ... –

+0

@DiligentKeyPresser Was bedeutet das? Bitte sinnvoll sein –

+1

Einfach gesagt, Sie können nicht leicht. Sie können AOP aus einer anderen Bibliothek (z. B. Spring.NET) verwenden. Der einzige Unterschied wäre, dass Spring.NET zur Laufzeit arbeitet, während Postsharp zur Kompilierzeit arbeitet. – xanatos

Antwort

2

Einfach gesagt, Sie können nicht leicht. Sie könnten AOP aus einer anderen Bibliothek (for example Spring.NET) verwenden. Der einzige Unterschied wäre, dass Spring.NET zur Laufzeit arbeitet, während Postsharp zur Kompilierzeit arbeitet.

Sie könnten sogar Fody verwenden, um beim Kompilieren Code-Rewriting durchzuführen, wie PostSharp.

Beachten Sie, dass wenn Sie einfach eine Ausnahme protokollieren möchten und Sie die Ausnahme nicht aus dem Stapel entfernen müssen (Sie wollen nicht "essen" oder ändern), dann könnten Sie einfach Fügen Sie einen FirstChanceException Handler hinzu. Beachten Sie, dass dies alles sehr verlangsamen würde, da Sie die Reflektion verwenden müssen, um das Vorhandensein des Attributs zu überprüfen. Und wenn du den Stapel laufen wolltest, würde es noch langsamer werden! (und viel komplizierter)

+0

Vielen Dank und was werden Sie vorschlagen, um eine Ausnahme in der Klassenbibliothek zu behandeln? Muss ich try/catch in allen Methodenblöcken verwenden? –

+2

@sss Normalerweise würde ich "System" Ausnahmen "entkommen" meine Bibliothek und gehen Sie zum Anrufer. Wenn ich eine Bibliothek erstelle, die HTTP-Kommunikation ausführt, und ich eine Ausnahme von der zugrunde liegenden TCP-Klasse bekomme, dann lasse ich den Aufrufer diese Ausnahme bekommen. Ich mag es nicht, Ausnahmen mit anderen Ausnahmen zu "maskieren". – xanatos

+0

ok danke ... Ich akzeptiere ... –

Verwandte Themen