c# Add/Remove 无需重启的动态插件

c# Add/Remove Dynamic Plugins without restart

我正在设计一个解决方案,我相信它会在插件式架构中运行良好。

"Main Program" 将提供数据库访问、向远程客户端发送消息、日志记录和其他功能等服务。

每个 "Plugin" 将能够使用这些函数并包含将执行 "Plugin" 特定逻辑的自定义函数。

我需要能够在运行时安装和卸载插件,而无需重新启动 "Main Program"。 卸载主要发生在 [=28] 的新版本时=] 可用,需要添加到 "Main Program".

如果我将每个插件创建为 DLL 并将其放在一个文件夹中,我可以向 "Main Program" 发送信号以加载它们,一切都很好。我不确定的是如何在不再需要时正确卸载它们,而不会造成内存泄漏。

如果我对程序集执行 Application.Load,卸载它的唯一方法是卸载整个 AppDomain。我不太熟悉 AppDomains 的工作原理,但这似乎会引起问题。

有没有人以前做过这种事情,并且可以提供一些关于在不造成不稳定或内存泄漏的情况下执行此操作的最佳方法的建议?

一般情况下,您需要将每个插件加载到它自己的AppDomain 中。没有其他方法可以使它卸载。它不会造成任何内存泄漏(如果您不自己制造)。如果你正确实施它,它是稳定的。这不是一件容易的事,但这个话题太大了,无法详细解释,宁愿拿一篇大文章或一本书。