假设我有一个.NET程序集A,它使用反射来加载程序集B和C(也是.NET)。这两个程序集都实现了许多大型接口(interface)(两者都相同)。在A中调用方法时,它会尝试使B进行工作。但是,B是不可靠的,可能会引发异常。现在,A具有两种模式,一种是将异常传播到A的调用者,另一种是在较稳定(但性能较低)的C上调用匹配方法。
是否有比将B公开的所有方法包装到B的所有接口(interface)的大型实现中更好的方法(更少的代码),而现在仅用代码将每个调用都包围起来,如下所示?程序集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);
}
}
...
}
最佳答案
您可以这样做,这样可以节省一些重复:
public class BErrorWrapper : I1, I2, I3{
...
public int DoSomeWork(int num){
try
{
return B.DoSomeWork(num);
}
catch(MyLibException e)
{
if (FailWithExceptions) throw;
return C.DoSomeWOrk(num);
}
}
...
}