1

unity Interception 可以用来拦截方法,它可以捕获被拦截方法的参数值。

我想要的是在截获的方法中记录局部变量的值。例如

更新

public void CopyBlogPost(int id){

  var oldblogPost = GetBlogPost(id);

  //log details about old blog post, including name, date, id etc.

  //copy post

 //log details about new blog post, including name, date, id etc.

}

有没有可以用于这种情况的工具?

更新

正如@Aron 建议的那样, Mono.Cecil 可能会提供该功能。

4

1 回答 1

0

你可以做的是定义一个这样的装饰器:

public class LoggingCalculatorDecorator : ICalculator
{
    private readonly ICalculator decoratee;
    private readonly ILogger logger;

    public LoggingCalculatorDecorator(
        ICalculator decoratee,
        ILogger logger)
    {
        this.decoratee = decoratee;
        this.logger = logger;
    }

    public void Add(int i, int j)
    {
        var logging = "adding "+i+" "+j;
        //Log logging variable, or any local variables

        // call decoratee
        this.decoratee.Add(i, j);
    }
}

通过这种方式,您可以将此行为添加到现有类中,而无需对其进行更改。如果您发现自己在整个系统中添加了许多日志装饰器(并且违反了 DRY 原则),那么您可能缺少系统中的通用抽象。看看这个这篇文章。他们可能会为您提供一些关于如何设计系统的线索,这样您就不必回退到拦截和代码编织,而是解决核心问题:应用程序的设计。

于 2013-03-31T17:01:21.570 回答