【问题标题】:How can reflection help when designing a plugin? [closed]设计插件时反射如何提供帮助? [关闭]
【发布时间】:2013-02-03 15:29:32
【问题描述】:

我读到反射在处理插件时特别有用。有人可以强调在这种特殊情况下的好处吗?使用 C# 或 Java。

【问题讨论】:

  • 插件根据定义是一个最初未知的来源,虽然它可能来自已知的东西或包含一些已知接口的实现。当然,插件中的某种清单可以给出可以被加载器和以一种或另一种方式注册的类的名称。然而,类只能通过名称(作为字符串)使用反射来实例化。一旦类被实例化,就可以通过一些约定的接口与它进行进一步的对话。

标签: c# java .net plugins reflection


【解决方案1】:

“在最高抽象级别,宿主应用程序必须能够加载插件,然后与插件通信以利用它们设计的服务。这两项任务可以根据不同的方式以不同的方式实现开发者对语言和平台的选择。如果选择的是C#和.NET,那么反射可以用于加载插件,接口或抽象类可以作为泛型通信的一种手段。”

如果你用谷歌搜索其中的一些内容,你可以看到这篇文章并阅读更多内容。

【讨论】:

  • 好吧,至少这里说反射可用于加载插件,接口可用于稍后与它们通信。也适用于 Java。这个答案使用了一些非常明智和复杂的语言。
【解决方案2】:

你为什么不直接谷歌一下?

如果是 .NET,您可以使用界面来创建插件的基本布局。我们称之为“IPlugIn”。然后,您使用实现 IPlugIn 的类加载程序集。现在您可以查看所有类型,如果某个类型是由 IPlugIn 派生的,或者在程序集上定义 Attributes 以指示哪个类是插件。

【讨论】:

  • Java 不允许列出 jar 中的所有类,检查可能有些实现了想要的接口。
【解决方案3】:

在我看来,你不需要依赖反射来实现插件。我建议使用常用的接口和服务。为您的插件定义一些接口以实现并让它们使用有助于它们与您要提供的框架集成的服务。

【讨论】:

  • 您将如何发现实现适当接口的类?
  • 我同意@Daniel Kelley 有一个发现和第一次通话问题。
  • 这当然取决于,但如果他的场景足够简单,他可以从他的项目中引用其他程序集。他没有提供足够的信息来推测复杂性......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多