我想集中管理某種方法的異常處理,但我似乎無法達到那裏。與Autofac和DynamicProxy2異常處理AOP
public class ExceptionInterceptor : IInterceptor
{
private readonly Logger _logger;
public ExceptionInterceptor(Logger logger)
{
_logger = logger;
Measure.Configure(new StatsdConfig());
}
public void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
//if ((Task<System.Threading.Tasks.VoidTaskReturn>) invocation.ReturnValue.Status == "Failed")
//{
// throw new Exception(invocation.ReturnValue.Exception[0]);
//}
}
catch (Exception e)
{
var errorMessage =
String.Format(
"An error occurred while retrieving fund data. Error Message: {0} Inner Exception: {1}",
e.Message, e.InnerException != null ? e.InnerException.Message : "<None>");
_logger.Log(errorMessage);
Measure.Counter("Exception", 1);
Measure.Event("Exception", errorMessage);
throw;
}
}
我一個模塊中佈線此像這樣:
builder.RegisterType<DataConsumer>().
As<IConsumer<DataRequest>>().
EnableInterfaceInterceptors().
InterceptedBy(typeof(ExceptionInterceptor));
builder.RegisterType<ExceptionInterceptor>().AsSelf();
var loggingInterceptor = new LoggingInterceptor(Logger);
builder.Register(c => loggingInterceptor);
然而,當我拋出異常方法調用作爲例外拋出此不能上升到攔截器,所以它永遠不會進入catch塊。 有什麼方法可以在攔截器中捕獲截獲的方法的異常?
由於某些原因,我也無法訪問invocation.ReturnValue.Status,因此無法測試是否存在拋出的異常以便重新拋出。
任何人都可以闡明我可能做什麼也沒有在這裏做什麼?
鉭
您可以顯示'IConsumer'界面嗎?另外,你可以顯示在容器中註冊'ExceptionInterceptor'和'Logger'的代碼嗎? –
@TravisIllig IConsumer接口是這一個http://www.nudoq.org/#!/Packages/MassTransit/MassTransit/IConsumer,它只是IoC容器的標記接口。 –
cmdel
@TravisIllig我也編輯了問題 – cmdel