【发布时间】:2009-08-01 22:49:56
【问题描述】:
我有一个数据驱动的地图应用程序,我需要在其中将自定义函数实现为插件。我需要执行的自定义方法的名称也将在映射数据中。我知道我可以使用 invoke 命令调用该方法;但是,如何确保每个方法都有适当的签名?
【问题讨论】:
-
你能举个例子吗?
标签: c# interface late-binding
我有一个数据驱动的地图应用程序,我需要在其中将自定义函数实现为插件。我需要执行的自定义方法的名称也将在映射数据中。我知道我可以使用 invoke 命令调用该方法;但是,如何确保每个方法都有适当的签名?
【问题讨论】:
标签: c# interface late-binding
首先,我认为您不应该允许为被覆盖的方法使用任意名称 - 只需定义一个接口并保持简单即可。
您可以使用一个方法定义一个接口,该方法返回一个委托给执行该工作的方法。
否则,您只需要使用反射来获取映射方法的 MethodInfo 并在运行时检查它是否具有正确的签名。
【讨论】:
通常,在开发插件架构时,您会定义一个接口,其中包含您将在插件上调用的方法。该插件是实现接口所必需的。当你加载它时,你将它转换为接口(如果它没有实现它,这将失败)并在你的代码中使用它作为接口。如果插件的行为更通用,您只需更通用地定义接口,例如使用配置来建立插件的参数,然后使用不带参数的简单方法来调用插件的功能。我认为您会发现使用预定义的界面会更容易,而且它不应限制您太多。
【讨论】:
你必须使用反射。
您首先必须调用GetMethod() 方法才能获取相关方法的MethodInfo 对象。
然后您需要使用.GetParameters() 方法来获取该方法的参数,然后您需要将这些参数与您期望该方法具有的参数进行比较。
【讨论】: