【发布时间】:2012-11-01 01:41:23
【问题描述】:
我正在处理一个 API,它有一个包含数百万个方法的类,我知道这些方法的作用,它们只是 Web 服务的代理。
API 使用反射调用适当的方法名称在内部调用这些代理方法(不要问我为什么这样做)。
API 未实现的 Web 服务中有一些方法,我需要动态“注入”这些代理方法。
所以我的问题是:如何向现有类添加方法(不是扩展方法)?
我可以通过 Reflection.Emit 完成此操作,但我不知道 MSIL。
无论如何我要提到它,因为我已经创建了另一个类,它继承自与 API 相同的基类,并在那里实现了方法,所以也许有一种方法可以将方法复制到 API 类,因为它们只调用同一个基类的方法。
【问题讨论】:
-
为什么需要动态“注入”它们?您真的是说人们将服务添加到您的外部 API,并且您希望能够在不重新编译的情况下调用它们吗?
-
@KirkWoll,他们提供的 .NET API 仅涵盖其 Web API 的一部分,我想添加一些方法来隐藏其他 Web 部件,但每个调用都通过调用方法的消息传递这个类通过反射,所以我想这是唯一的选择,否则我将不得不重新编写整个 API,这需要更多的努力。所以是的,我想注入这些方法。此外,我将创建一个函数来检查我的程序集(对于属性类等)并“注册所有应该注册的方法”。正如我所说,它们只是代理方法,很容易制作一个构建它们的机器人。
-
当你在编译时知道 full API 的情况下,为什么要动态地添加方法。这对我来说毫无意义。
标签: c# .net reflection methods typedescriptor