我想在C#中调用第三方代码时拦截并注入自定义代码。我正在使用外部库(AutoIt)进行GUI自动化。提供的AutoIt dll没有源代码。
使用此框架完成的所有操作都是从一个类(AutoItClass
)执行,提供对所有方法的访问。我希望能够在调用此类的方法时注入自定义代码,这可能吗?例如:
通过继承此类并覆盖所有方法(这是必须的,因为这是一个COM对象),这是非常简单的,但这不是首选方法。任何评论都会有所帮助!
答案 0 :(得分:4)
我不会使用继承 - 你可以在这里使用组合。创建自己的类,它具有相同的方法 - 或者实际上只有您感兴趣的方法 - 并通过它进行委托。这样你可以确定你不会意外地“错过”任何方法,因为你没有实现的任何东西都不会通过代码库的其余部分调用...只要你确保你的其余代码没有当然,请参考原始的图书馆课程。
答案 1 :(得分:3)
您可以调查PostSharp,这是一种商业产品,可以将IL注入已编译的程序集中以执行aspect oriented programming。您可以定义在执行方法之前和之后应该发生的不同类型的行为,例如,这似乎是您想要的。这样,当PostSharp在后编译步骤中处理这个时,您不需要从要拦截的类中创建任何继承的类。
否则,如果你想要一个更“纯粹”的解决方案,我会遵循Jon关于创建一个包含你想要拦截的功能的新类的建议。 (见Decorator pattern)。