如何动态加载 .NET 程序集






1.77/5 (7投票s)
并非全新,但提供了一种解决方案
引言
这是我第一篇英文文章,请原谅我糟糕的英语。
我第一次开始开发 .NET 应用程序时,需要动态加载一个 DLL。我不知道该怎么做,但写了一个函数来实现它。下次我需要一个函数来从接口加载 DLL 时,我复制第一个函数并更改参数。之后,我不仅加载一个 DLL,而是加载多个。复制第一个函数并更改参数。
嗯,等一下。有很多空间可以以通用的方式来做。
背景
通用方式意味着你在设计时不知道运行时会使用哪些对象。
public static class ModuleLoader<T>
Using the Code
函数列表
仅加载一个模块
public static T LoadModule(Guid moduleId)
public static T LoadModule(Guid moduleId, string path)
public static T LoadModule(Guid moduleId, string path, string fileExtension)
加载一个模块列表
public static List<T> LoadModuleList()
public static List<T> LoadModuleList(string path)
public static List<T> LoadModuleList(Guid moduleId, string path, string fileExtension)
当你想要加载一个模块列表时,我认为你会使用一个接口作为 T。
示例
加载当前 Directory
中实现 IPlugIn
接口的所有程序集。
List<IPlugIn> pluginList = ModuleLoader<IPlugIn>.LoadModuleList();
加载当前 Directory
中实现 IPlugIn
接口的给定程序集。其中 pluginId
是给定 PlugIn
的 TypeGuid
。
IPlugIn plugin = ModuleLoader<IPlugIn>.LoadModule(pluginId);
在下一篇文章中,我将解释如何使用 ModuleLoader
与 AppDomain
在运行时加载和卸载。
历史
- 2008 年 4 月 1 日:初始发布