Angenommen, ich habe eine .NET-Assembly A, die Reflektion verwendet, um die Assemblys B und C (auch .NET) zu laden. Diese beiden Assemblys implementieren beide eine Reihe großer Schnittstellen (die für beide gleich sind). Wenn eine Methode in A aufgerufen wird, versucht sie, dass B die Arbeit erledigt. B ist jedoch unzuverlässig und könnte Ausnahmen werfen. Jetzt hat A zwei Modi, einen, in dem es die Ausnahmen an den Aufrufer von A weitergibt, und einen, in dem es passende Methoden bei dem stabileren (aber weniger performanten) C aufruft.
Gibt es bessere Möglichkeiten (weniger Code), um dieses Szenario zu implementieren, als alle Methoden, die B öffentlich macht, in einer großen Implementierung aller Schnittstellen von B zu umhüllen, wobei jetzt jeder Aufruf mit dem unten gezeigten Code umgeben ist? Die Assemblys B und C wissen nichts über den gewählten Ansatz zur Fehlerbehandlung, daher können sie die Logik nicht implementieren.
public class BErrorWrapper : I1, I2, I3{
...
public int DoSomeWork(int num){
if (FailWithExceptions)
{
try
{
return B.DoSomeWork(num);
}
catch(MyLibException e)
{
return C.DoSomeWOrk(num);
}
}
else
{
return B.DoSomeWork(num);
}
}
...
}