我想覆盖try/catch/finally块或创建一个新的myTry/myCatch/myFinally块,在内部有一个特定的“自动”行为。 例如,要记录一个异常,开发人员必须显式调用Log(ex)方法。 =>try{...}catch(Ex ex){ **Log(ex)**; doSomething(); throw; }
如何覆盖或创建一个新的try/catch/finally块.net c#
但是如果开发者忘记调用Log(ex),那么什么都不会发生。
我想创建一个能够在里面做一些事情的结构,比如模板模式。是这样的:
MyTryWithAutomaticInternalLog {
doSomething();
}
MyCatch(Exception ex){
**//Internally this stores in someplace the exception**
doSomething2(ex);
throw;
}
MyFinally {
//internally this saves how much time took the execution for example.
doSomething3();
}
还有像其他的选择: 1)创建像 MyTryWithAutomaticInternalLog(()=>{ doSomething(); }, (ex)=>{ doSomethingOnError(); },()=>{ doSomethingInfinally(); });
和MyTryWithAutomaticInternalLog内与模板图案战略的包装方法,管理流程,但再次重申,开发人员必须记得用方法MyTryWithAutomaticInternalLog而不是非常标准的try/catch/finally。
2)避免在代码中使用try/catch,并用依赖注入模式管理异常。但我想避免它。
还有其他的选择吗?我怎么能覆盖try/catch/finally块?如果不是的话,如果您提供了一些技术信息和链接,我会很感激,因为我搜索没有太多运气。
TKX
你想要自动日志if并且只有当调用者忘记自己做了吗?只需添加日志记录和调用方的方法来抑制它。日志记录系统标志,类属性或函数的可选参数。编辑:如果这是一个实际问题,也应该使用日志记录系统。 Log4net或其他。这些问题已经解决了很多 – zzxyz