一个坏消息——没有办法做到这一点,一个好消息——你不需要在你的扩展方法中记录异常。只需让异常在静态类之外抛出并以适当的方式处理即可。
IResult results;
try
{
results = Entites.Customers.Where(x=>x.IsActive).Invoke();
}
catch(YourOwnException ex)
{
Log(ex, "The Business logic error.");
}
catch(ArgumentException ex)
{
Log(ex, "Invalid arguments.")
}
...
catch(Exception ex)
{
Log(ex, "Unknown error.");
}
编辑:
它们中的大多数与通信相关,将在扩展方法中处理。只有少数与业务相关的内容将被重新抛出。
如果异常是“通信相关”或第 3 方,也许您不需要记录它们。在这种情况下,我将创建一个TryInvoke()
不带日志记录的方法,该方法返回TRUE
成功操作并有一个OUT
参数。如果你想记录它们,你应该ILogger
在你的Invoke()
方法中注入。
if(Entites.Customers.Where(x=>x.IsActive).TryInvoke(out results))
{
// Success
}