【问题标题】:Unity interception mechanism does not work between methods inside same classUnity拦截机制在同一类内的方法之间不起作用
【发布时间】:2012-09-01 05:48:14
【问题描述】:

我正在使用 C# + Unity (2.1)。如果调用来自外部,则拦截方法可以正常工作,但在同一类内部的方法之间,仅拦截第一个方法。 例如:

    [InterceptorAttribute]
    public int A(int a, int b)
    {
         return B(a, b);
    }

    [InterceptorAttribute]
    public int B(int a, int b)
    {
         return a+b;
    }

对方法 B() 的调用未被拦截。 有人可以帮忙吗?

【问题讨论】:

标签: c# .net methods unity-container intercept


【解决方案1】:

如果您查看拦截是如何实现的,就会清楚为什么会发生这种情况。拦截器基本上是一个代理,它包裹原始对象并将调用转发给它,除了调用任何关联的处理程序:

public int A(int a, int b)
{
  callHandlers();
  return originalObject.A(a, b);
}

public int B(int a, int b)
{
  callHandlers();
  return originalObject.B(a, b);
}

即使两个调用被单独拦截,一旦调用originalMethod.A,对B的调用将只调用originalObject.B,而不是proxy.B

也许如果你解释一下你使用拦截的目的,可能会有更好的解决方案来解决你正在尝试做的事情。

【讨论】:

  • 我正在尝试清理几个类,提取异常处理相关的代码,非常相似且重复;并在堆栈跟踪中添加额外的信息(如方法参数值)。但是,如果有几种方法调用其他方法来完成他的工作,我就有麻烦了。现在,我正在玩一些小例子(比如我以前使用的经典计算器)来弄清楚如何克服这个问题。谢谢你的回答,很有用。
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多