我有一堆 asmx Web 服务,并且 Web 服务内的所有方法都遵循通用模式
public virtual TestObject Test()
{
LogRequest;
try
{
DoSomething;
}
catch
{
LogException;
}
LogResponse;
return response;
}
而且所有的方法都遵循这个模式,有很多代码重复;我想知道是否有一种方法可以通用地执行此操作,即:可能在基类构造函数中?这可能吗?
编辑:
模板方法模式是一个很好的解决方案,但最终对我们来说最优雅的解决方案是 AOP!日志记录全部提取到一个方面,并且所有需要日志记录的方法都使用属性进行修饰并发布明确的规则!
最佳答案
您可以在某个地方(在基类中或在任何地方声明为静态)有一个方法来执行所有常见的操作:
T DoCommon<T>(Request r, Func<T> f)
{
LogRequest(r);
T result;
try { result = f(); }
catch(Exception ex) { LogException(ex); }
LogResult(result);
return result;
}
然后您只需包含对该方法的调用:
public virtual TestObject Test()
{
return DoCommon(Request, () => DoSomething());
}
关于c# - ASMX Web 服务的基类 - 从基类本身调用派生方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663819/