多年来,我在 Win32 和 C/C++ 中完成了插件架构,扩展点从 DLL 动态加载,带有LoadLibrary
,GetProcAddress
等。
现在是 C# 的时候了。那里的相应步骤是什么 - 动态加载程序集?或者它是一个完全不同的模式?
多年来,我在 Win32 和 C/C++ 中完成了插件架构,扩展点从 DLL 动态加载,带有LoadLibrary
,GetProcAddress
等。
现在是 C# 的时候了。那里的相应步骤是什么 - 动态加载程序集?或者它是一个完全不同的模式?
通常,您可以环顾您期望插件的位置,加载程序集并查找某些类。通常插件通过扩展某种插件基类或实现接口来宣传自己。
另一种选择是MEF,它也将成为 .NET 4 的一部分,但预览版也适用于当前的 .NET 框架。
您可以使用 System.Addin 命名空间中的类。请参阅此讨论: 在 MEF 和 MAF 之间进行选择(System.AddIn)
这里也是一个演示:AddIn Enabled Applications
另一种解决方案是使用Mono.AddIn,它看起来非常强大。
在 .Net 应用程序中,我们可以使用 AppDomain 和 AppDomain.CurrentAppDomain 将程序集动态加载到我们的应用程序。问题是,一旦程序集加载到 AppDomain,您就可以卸载程序集。有一种解决方法可以解决此问题,您可以加载这些一种不同 AppDomain 中的程序集,并在您不需要这些程序集时将其卸载。但是这种方法非常复杂,因为在两个不同 AppDomain 中的两个程序集之间传递对象并不那么容易。