Unity 3.0和异常记录

本文关键字:异常 记录 Unity | 更新日期: 2023-09-27 18:28:21

需要一个关于Unity异常日志的示例项目。

我的要求是把一个带有返回参数的class属性放在一个类中,让unity来完成所有的工作。

例如,我希望此方法记录在CustomExceptionHandler中并返回-1

  [CustomExceptionHandler(-1)]
  public static int process(){
  throw new Exception("TEST");
  }

Unity 3.0和异常记录

首先,您将无法使用Unity拦截静态方法。

看看开发者使用Unity的依赖注入指南。特别是关于使用Unity拦截的章节。修改和剪裁指南中的代码,你可能会得到这样的结果:

class CustomExceptionHandler : ICallHandler
{
  public IMethodReturn Invoke(IMethodInvocation input,
    GetNextHandlerDelegate getNext)
  {
    WriteLog(String.Format("Invoking method {0} at {1}",
      input.MethodBase, DateTime.Now.ToLongTimeString()));
    // Invoke the next handler in the chain
    var result = getNext().Invoke(input, getNext);
    // After invoking the method on the original target
    if (result.Exception != null)
    {
      // This could cause an exception if the Type is invalid
      result.ReturnValue = -1;
      result.Exception = null;    
    }
    return result;
  }
  public int Order
  {
    get;
    set;
  }
}

class CustomExceptionHandlerAttribute : HandlerAttribute
{
  private readonly int order;
  public CustomExceptionHandlerAttribute(int order)
  {
    this.order = order;
  }
  public override ICallHandler CreateHandler(IUnityContainer container)
  {
    return new CustomExceptionHandler() { Order = order };
  }
}
class TenantStore : ITenantStore
{
    [CustomExceptionHandler(1)]
    public int Process()
    {
        throw new Exception("TEST");
    }
}
container.RegisterType<ITenantStore, TenantStore>(
    new InterceptionBehavior<PolicyInjectionBehavior>(),
    new Interceptor<InterfaceInterceptor>());