团结拦截和例外

Joa*_*mer 4 c# inversion-of-control unity-container

我正在处理一个问题,我有很多iterfaces和他们的实现都是统一创建的.这些类包含一些在常规基础上抛出异常的方法,我想围绕这些类创建动态代理,这样我就可以捕获方法中出现的所有异常,并在其他地方处理它们.

当我在玩Unity时,我想知道是否可以使用Unity Interception完成这样的事情.

即创建一个TransparentProxyInterceptor并围绕这些方法的invocatino包装一个try-catch块.这是可能的,还是我走向了错误的方向?谢谢

Mik*_*nty 6

是的,Unity拦截(AOP)是处理异常处理的绝佳方法.您可以添加各种行为,例如:

  • 写入日志文件或事件日志
  • 发送电子邮件
  • 增加一个性能计数器
  • 超时或锁定异常时自动重试
  • 重新抛出一个不同的错误

您的呼叫处理程序将类似于:

public override IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
    IMethodReturn result = getNext()(input, getNext);

    if (result.Exception != null)
    {
        // do something
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)