gpt4 book ai didi

c# - 如何在 CaSTLe.DynamicProxy 中使用 IInterceptor?

转载 作者:可可西里 更新时间:2023-11-01 03:00:10 25 4
gpt4 key购买 nike

我写了一个这样的例子

简单计算器类:

public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}

实现了 DynamicProxy 提供的“IInterceptor”

 [Serializable]
public abstract class Interceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
ExecuteBefore(invocation);
invocation.Proceed();
ExecuteAfter(invocation);

}
protected abstract void ExecuteAfter(IInvocation invocation);
protected abstract void ExecuteBefore(IInvocation invocation);
}

创建了一个拦截器类并继承自“拦截器”类

    public class CalculatorInterceptor : Interceptor
{
protected override void ExecuteBefore(Castle.DynamicProxy.IInvocation invocation)
{
Console.WriteLine("Start");
}

protected override void ExecuteAfter(Castle.DynamicProxy.IInvocation invocation)
{
Console.WriteLine("End");
}
}

但是当我使用它时它不起作用!!!

static void Main(string[] args)
{
ProxyGenerator generator = new ProxyGenerator();
Calculator c = generator.CreateClassProxy<Calculator>(new CalculatorInterceptor());
var r = c.Add(11, 22);
Console.WriteLine(r);
Console.ReadKey();
}

我除了看到这样的东西:

START
33
END

但只显示

33

我该如何纠正它?!

最佳答案

尝试使方法 Add 成为虚拟的。

public class Calculator
{
public virtual int Add(int a, int b)
{
return a + b;
}
}

代理生成器创建一个继承Calculator 的新类。因此,方法 Add 得到一个重写,使拦截成为可能。

关于c# - 如何在 CaSTLe.DynamicProxy 中使用 IInterceptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com