2016-05-24 5 views
0

Ich habe eine Legacy-Bibliothek in meiner ASP.NET MVC-Anwendung, die eine Menge von Ausnahmen, die ich ignorieren muss. Ich ignoriere diese Ausnahmen in Application_Error wie dieseErhalten Sie .NET MVC, Fehler vollständig zu ignorieren

protected void Application_Error() 
{ 
    if (exception is PolicyViolationException) 
    {    
     Response.Clear(); 
     Server.ClearError(); 
    } 
} 

Ich weiß, dass dies ein Code Geruch ist, aber ich kann viel darüber im Moment nicht tun.

Gibt es eine Möglichkeit, sie sogar zu Application_Error zu stoppen?

+0

Ja, fangen Sie sie, wo immer die Legacy-Bibliothek verbraucht wird. Ist das den Ausschlag wert, dass sie aufsteigen? Nur du kannst es sagen. –

+0

Ich denke, Sie könnten die Ausnahme an der Quelle abfangen, wo der Code aufgerufen wird. Ehrlich gesagt, denke ich, dass Ihre derzeitige Vorgehensweise wahrscheinlich besser ist. –

+0

Das einzige Problem mit meinem derzeitigen Ansatz ist, dass ich Logging-Tools (Stackify) verwende, um nicht behandelte Ausnahmen zu erfassen, und dies verstopft die Protokolle. – Craig

Antwort

3

Verwenden Sie eine Wrapper-Klasse (das Adaptermuster). Anstatt die Legacy-Bibliothek zu referenzieren, verwenden Sie dann die Wrapper-Klasse. Und der Wrapper kann die Ausnahmen nach Bedarf behandeln (oder ignorieren).

class Legacy 
{ public void DoThis() 
    { ... } 
    public void DoThat() 
    { ... } 
} 

class Wrapper 
{ Legacy _legacy; 
    public Wrapper() { _legacy = new Legacy(); } 
    public void DoThis() 
    { 
     try { 
      _legacy.DoThis(); 
     } 
     catch (PolicyViolationException exception) { 
      //ignore 
     } 
    } 
... 
} 

In diesem Beispiel würde ich nie auf die Klasse Legacy verweisen. Stattdessen würde ich den Klassen-Wrapper referenzieren. Dann muss ich mich nicht um die Ausnahmen kümmern, weil sie nicht aus der Wrapper-Instanz herauskommen, wenn ich das nicht möchte.

Verwandte Themen