相关疑难解决方法(0)

如何在C#中拦截方法调用?

对于给定的类,我希望有跟踪功能,即我想记录每个方法调用(方法签名和实际参数值)和每个方法退出(只是方法签名).

我如何做到这一点假设:

  • 我不想为C#使用任何第三方AOP库,
  • 我不想将重复的代码添加到我想要跟踪的所有方法中,
  • 我不想更改类的公共API - 类的用户应该能够以完全相同的方式调用所有方法.

为了使问题更具体,让我们假设有3个类:

 public class Caller 
 {
     public static void Call() 
     {
         Traced traced = new Traced();
         traced.Method1();
         traced.Method2(); 
     }
 }

 public class Traced 
 {
     public void Method1(String name, Int32 value) { }

     public void Method2(Object object) { }
 }

 public class Logger
 {
     public static void LogStart(MethodInfo method, Object[] parameterValues);

     public static void LogEnd(MethodInfo method);
 }
Run Code Online (Sandbox Code Playgroud)

如何调用Logger.LogStart和Logger.LogEnd每次调用方法1和方法2,而无需修改Caller.Call方法,没有明确地加入调用Traced.Method1和Traced.Method2?

编辑:如果我允许稍微更改Call方法,会有什么解决方案?

c# reflection aop

148
推荐指数
7
解决办法
8万
查看次数

PostSharp - il weaving - 想法

我正在考虑使用Postsharp框架来减轻应用程序方法日志记录的负担.它基本上允许我用日志属性装饰方法,并在编译时将所需的日志代码注入到il中.我喜欢这个解决方案,因为它可以将噪音排除在设计时代码环境之外.任何想法,经验或更好的选择?

c# logging aop postsharp visual-studio

10
推荐指数
3
解决办法
4252
查看次数

标签 统计

aop ×2

c# ×2

logging ×1

postsharp ×1

reflection ×1

visual-studio ×1