繁体   English   中英

C#中如何拦截方法调用

[英]How to intercept method calls in C#

我想在 C# 中调用 3rd 方代码时拦截并注入自定义代码。 我正在使用外部库 (AutoIt) 进行 GUI 自动化。 AutoIt dll 不提供源代码。

使用此框架完成的所有操作都是从单个类 ( AutoItClass ) 执行的,提供对所有方法的访问。 我希望能够在调用此类上的方法时注入自定义代码,这可能吗? 例如:

  1. 从被调用的方法中记录一些信息。
  2. 从方法中执行任何其他操作(等待 X 秒)。

通过从此类继承并覆盖其所有方法(这是必须的,因为这是一个 COM 对象),这可以非常简单地实现,但这不是首选方式。 任何评论都会有帮助!

我不会使用继承 - 你可以在这里使用组合。 创建您自己的具有相同方法的类 - 或者实际上只有您感兴趣的类 - 并通过它进行委托。 这样你就可以确保你不会意外“错过”任何方法,因为你没有实现的任何东西都不能通过你的代码库的其余部分调用......只要你确保你的代码的其余部分没有'当然不是指原始库类。

您可以研究PostSharp ,它是一种商业产品,可以将 IL 注入已编译的程序集以执行面向方面的编程 例如,您可以定义在执行方法之前和之后应该发生的不同类型的行为,例如,这似乎是您想要的。 这样,由于 PostSharp 在编译后步骤中处理此问题,您无需从要拦截的类创建任何继承类。

否则,如果您想要一个更“纯”的解决方案,我会遵循 Jon 的建议,即创建一个包含您要拦截的功能的新类。 (请参阅装饰器模式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM