需要一个关于 Unity 异常日志的示例项目。
我的要求是将一个带有返回参数的类属性放到一个类中,让统一完成所有工作。
比如我想让这个方法登录到CustomExceptionHandler并返回-1
[CustomExceptionHandler(-1)]
public static int process(){
throw new Exception("TEST");
}
需要一个关于 Unity 异常日志的示例项目。
我的要求是将一个带有返回参数的类属性放到一个类中,让统一完成所有工作。
比如我想让这个方法登录到CustomExceptionHandler并返回-1
[CustomExceptionHandler(-1)]
public static int process(){
throw new Exception("TEST");
}
首先,您将无法使用 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>());