我已经构建了ac#.net 4.0库.
所有方法都是公共的和静态的.
我想使用方面编程库添加一个方面,它执行以下操作:
try block
1. call method (if method throws exception)
catch block
2. log the exception and massage the exception
it is a dll (class library project)
Run Code Online (Sandbox Code Playgroud)
如果有办法在一个类中添加try/catch例程而不是逐个包装所有方法,请你建议吗?
因为你所提到的字static既不ninject也不城堡温莎也不是什么都基于城堡dynamicproxy会帮助你,因为他们能够增加周围常法方面.所以你有两个选择:
添加单独的手写跟踪装饰器,它将添加所需的功能而不改变现有代码
// Decorated calls
TraceDecorator.Aspect(() => StaticLogic.SuccessfulCall());
TraceDecorator.Aspect(() => StaticLogic.ExceptionCall());
TraceDecorator.Aspect(() => StaticLogic.SuccessfulCallWithReturn(42));
TraceDecorator.Aspect(() => StaticLogic.ExceptionCallWithReturn(42));
// Decorator itself
public static class TraceDecorator
{
public static T Aspect<T>(Func<T> func)
{
try
{
return func();
}
catch(Exception ex)
{
LogException(ex);
return default(T);
}
}
public static void Aspect(Action func)
{
try
{
func();
}
catch(Exception ex)
{
LogException(ex);
}
}
private static void LogException(Exception ex)
{
Console.WriteLine("Traced by TraceDecorator: {0}", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这里有完整的样品
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |