C# 在设计插件时,反射如何提供帮助?
我已经读到,在处理插件时,反射特别有用。有人能强调一下这种特殊情况下的好处吗?无论是在C#还是Java中。在我看来,插件实现不需要依赖反射。我建议使用常用的接口和服务。为插件定义一些要实现的接口,并让它们使用有助于它们与您想要提供的框架集成的服务。“在最高抽象级别,主机应用程序必须能够加载插件,然后与插件通信,以利用其设计的服务。根据开发人员对语言和平台的选择,这两个任务可以以不同的方式实现。如果选择C#和.NET,则可以使用反射加载插件,并且可以使用接口或抽象类作为通用通信的手段。”C# 在设计插件时,反射如何提供帮助?,c#,java,.net,plugins,reflection,C#,Java,.net,Plugins,Reflection,我已经读到,在处理插件时,反射特别有用。有人能强调一下这种特殊情况下的好处吗?无论是在C#还是Java中。在我看来,插件实现不需要依赖反射。我建议使用常用的接口和服务。为插件定义一些要实现的接口,并让它们使用有助于它们与您想要提供的框架集成的服务。“在最高抽象级别,主机应用程序必须能够加载插件,然后与插件通信,以利用其设计的服务。根据开发人员对语言和平台的选择,这两个任务可以以不同的方式实现。如果选择C#和.NET,则可以使用反射加载插件,并且可以使用接口或抽象类作为通用通信的手段。” 如果你用
如果你用谷歌搜索其中一些内容,你可以看到这篇文章并阅读更多相关内容。为什么不直接用谷歌搜索呢
对于.NET,您可以使用一个接口来创建插件的基本布局。我们称之为“IPlugIn”。然后加载一个带有实现IPlugIn的类的程序集。现在,您可以查看所有类型(如果一个是由IPlugIn派生的),或者在程序集上定义属性以指示哪个类是插件。您如何发现这些类如何实现适当的接口?我同意@Daniel Kelley的观点,有一个发现和第一个调用问题。当然,这取决于情况,但如果他的场景足够简单,他可以从他的项目中引用其他程序集。他没有提供足够的信息来推测复杂性…插件的定义最初是未知的源代码,而它可能是从已知的东西派生出来的,或者包含一些已知接口的实现。当然,插件中的某种清单可以给出可以加载的类的名称,并以某种方式注册。但是类只能通过名称(作为字符串)实例化使用反射。一旦类被实例化,就可以通过某个商定的接口与它进行进一步的对话。Java不允许列出jar中的所有类,检查可能需要的接口的一些实现。至少这里说反射可以用于加载插件,接口可以用于与Java也是如此。这个答案使用了一些非常明智和复杂的语言。