假设我有一个 .NET 程序集 A,它使用反射来加载程序集 B 和 C(也是 .NET)。这两个程序集都实现了许多大型接口(两者相同)。当在 A 中调用方法时,它会尝试让 B 完成工作。但是,B 不可靠,可能会引发异常。现在 A 有两种模式,一种将异常传播给 A 的调用者,另一种在更稳定(但性能较低)的 C 上调用匹配方法。
有没有更好的方法(更少的代码)来实现这个场景,而不是将 B 公开的所有方法包装在所有 B 接口的巨大实现中,现在才用代码包围每个调用,如下所示?程序集 B 和 C 对所选择的错误处理方法一无所知,因此它们无法实现逻辑。
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);
}
}
...
}