c# - 实现插件架构 - 动态 DLL 加载

标签 c# .net asp.net dynamic-loading plugin-architecture

我有一个基本上是带有预加载控件的设计器的应用程序,您可以在其中使用控件设计页面。

我计划在未来发布越来越多的控件。我不想为新添加的控件发布新版本,因为它有其缺点。所以我在考虑插件/插件类型的架构,我只是单独发布插件/插件,他们可以安装它们并在设计器中获取控件。

现在我使用 xml 文件作为插件来指定控件、它的行为、它的样式等。每个 xml(插件)代表一个单独的控件。但是我发现实现它非常困难,因为我必须编写一个通用解析器来读取所有插件。

相反,我可以为每个插件发布一个 dll,让我有更多的控制权来编写代码来定义控件的行为/外观并通过主引擎动态加载它吗?如果是这样,我如何检查 dll 并将其动态加载到我的应用程序中?

最佳答案

您可能想查看 Managed Extensibility Framework .这可能会解决您的大部分问题甚至更多,但需要学习一些新技术...

您还应该按照 mathieu 的建议查看 System.Addin 命名空间!

如果你想走自己的路线,我建议采用以下方法:

  • 主应用程序中的插件接口(interface)
  • 在插件 dll 中实现该接口(interface)
  • 在运行时使用 Assembly.Load 加载 dll
    • 您可能想考虑将插件程序集加载到单独的 AppDomain 中

关于c# - 实现插件架构 - 动态 DLL 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120343/

相关文章:

c# - 跨进程/平台的字符串列表的一致 HashCode

c# - 使用 monomac/c# 实例化一个附加窗口

c# - 如何对齐两个标签和两个文本框而没有水平间隙?

asp.net - StaticMenuItemStyle 与 StaticSelectedStyle - 一个会覆盖另一个吗?

c# - Visual Studio 2015 - C# Windows 通用应用程序缺少程序集引用

c# - 在 Android 应用程序上设置 Twilio 推送通知

c# - 从构建输出中省略程序集的本地化版本

c# - 可以内联静态类扩展吗?

c# - WCF 使用 MSMQ 发布/订阅

javascript - 阅读ckeditor内容