如何在Castle.DynamicProxy中使用IInterceptor?

2024-01-23

我写了一个这样的例子

简单计算器类:

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);
}

创建一个Interceptor类并继承自“Interceptor”类

    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获取覆盖以使拦截成为可能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Castle.DynamicProxy中使用IInterceptor? 的相关文章

随机推荐

  • 如何处理ETIMEDOUT错误?

    如何处理此调用的 etimedout 错误 var remotePath myremoteurltocopy var localStream fs createWriteStream myfil var out request uri re
  • 在Linux中设置Mysql++

    我想在linux中用C 连接mysql数据库 在我的本地计算机上 我运行 Ubuntu 并安装了 mysql 服务器和客户端软件包 sudo apt get install mysql server mysql client 我碰到Mysq
  • 有什么方法可以获得断点特定的宽度类吗?

    Bootstrap 4 包括宽度类别 https getbootstrap com docs 4 0 utilities sizing w 25 w 50 w 75 w 100 我只想为某些断点及以上指定宽度 例如 w md 25 等 是否
  • 在电子邮件正文中显示 Python HTML 表

    我编写了一个 python 脚本来查询数据库并以 HTML 表格式显示数据 我怎样才能让这个代码以表格的形式显示在电子邮件中 我尝试将代码粘贴到第二个脚本 EMAIL 的 html 标签内 但它不读取 python 代码 仅读取 HTML
  • CUDA 点积

    我正在做一个 cuda 教程 其中我必须制作两个向量的点积 实施教程中提供的解决方案后 我遇到了一些问题 这些问题已在this https stackoverflow com questions 15822412 dot product i
  • Rails Devise:如何(mem)缓存设备对用户对象的数据库请求?

    每次我点击经过身份验证的页面时 我都会注意到设计发出一条 SQL 语句 用户负载 0 2ms 选择users FROM users WHERE users id 1 限制 1 顺便说一句 我正在使用Rails 3 所以cache money
  • 为 DividerItemDecoration 设置可绘制对象

    我正在尝试为 DividerItemDecoration 设置自定义可绘制 线 但没有成功 错误在哪里 DividerItemDecoration dividerItemDecoration new DividerItemDecoratio
  • 垃圾收集:对象属性

    假设我有一个对象 其中包含另一个对象作为其属性 例如 var obj 1 42 When obj超出范围 所有嵌套对象是否都隐式销毁 或者我需要迭代它们并且delete明确地 是的 除非另一个参考仍然存在 var obj 1 42 var
  • 未找到 User 类型的属性索引

    我正在尝试在同一个项目中将 ElasticSearch 与 MySQL 一起使用 我在不同的项目中定义了两个存储库 但我总是收到此错误消息 Exception in thread main org springframework beans
  • Swagger.NET MVC Api 异常

    我一直在寻找提供自动生成的 API 文档的不同选项 Swagger 似乎就在那里 然而 当我第一次尝试这个时 我在启动时遇到了异常 运行 Visual Studio 2013 创建新的 Web API 项目 使用包管理器 运行 Instal
  • NSIncrementalStore 的简单英语解释

    我一直看到NSIncrementalStore当我一直在研究使用核心数据与 Web 服务交互的最佳方式时 这个问题就出现了 看完之后德鲁 克劳福德的文章 http sealedabstract com code nsincrementals
  • 有些控件没有绘制,看似随机

    我正在尝试为自己编写一个小 MFC 应用程序 以测试我正在训练的一些人工智能 因此 我添加了一个图片控件和一个静态控件 我可以在主窗口的 OnPaint 方法中自由地绘制内容 当只绘制一次应用程序时 它似乎可以工作 但我现在添加了一个在停止
  • 如何获取张量的值? Python

    在进行一些计算时 我最终计算出average acc 当我尝试打印它时 它输出 tf Tensor 0 982349 shape dtype float32 我如何获得0 98 它的值并将其用作普通浮点数 我想做的是将其中的一堆放在一个数组
  • 为什么标准输出不能被替换?

    出于教育目的 我尝试替换标准流 stdout stdin 和 stderr 我首先查找流的数据类型 我追溯到具有以下成员的 struct IO FILE gdb ptype IO FILE type struct IO FILE int f
  • FreeMarker 模板错误:以下内容已计算为 null 或缺失 |但事实并非如此

    我面临的错误是如此奇怪 一切看起来都很好 但是当浏览器向服务器发送 GET 请求时 我收到此错误 我想做的实际上是捕获 HTTP 参数 将它们保存在发送到 Freemarker 模板的 ArrayList 中保存的对象中 请你帮助我好吗 多
  • 计算 CRC 初始值而不是将 CRC 附加到有效负载

    我实现的大部分 CRC 都是追加计算出的 CRC 值到消息 有效负载 并在所有字节 包括 之后在接收器处检查零结果 CRC 值通过 CRC 寄存器输入 显然这是一个相当标准的方法 现在我想使用不同的方法 根据有效负载计算一个值 使用该值作为
  • 创建一个接受 POST 和 GET 的 Jax-RS RESTful 服务?

    我正在将现有的一项服务转变为 RESTful 并且我已经掌握了使用 RestEasy 的基本功能 我的一些客户端应用程序应该能够对多个服务执行 GET 和 POST 请求 我只是在寻找是否有任何简单的方法可以绕过 jax rs 来指定 AP
  • 我应该从 getFft 看到什么样的输出?

    好吧 我正在努力创建一个 Android 音频可视化应用程序 问题是 我从 getFft 方法中得到的结果与谷歌所说的它应该产生的结果不一致 我一直追溯到 C 源代码 但我对 C 或 FFT 不够熟悉 无法真正理解正在发生的事情 我将尝试包
  • sifr3 - 预取不起作用?

    我在启用 sifr 3 的网站的加载时间 大小方面遇到问题 并发现在我的应用程序中多次请求字体 swf 这可以在 firebug 的网络选项卡以及 apache 日志中看到 On http novemberborn net flash pr
  • 如何在Castle.DynamicProxy中使用IInterceptor?

    我写了一个这样的例子 简单计算器类 public class Calculator public int Add int a int b return a b 实现了DynamicProxy提供的 IInterceptor Serializ