65.9K
CodeProject 正在变化。 阅读更多。
Home

如何动态加载 .NET 程序集

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.77/5 (7投票s)

2008年4月1日

CPOL

1分钟阅读

viewsIcon

31478

downloadIcon

360

并非全新,但提供了一种解决方案

引言

这是我第一篇英文文章,请原谅我糟糕的英语。

我第一次开始开发 .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 是给定 PlugInTypeGuid

IPlugIn plugin = ModuleLoader<IPlugIn>.LoadModule(pluginId);

在下一篇文章中,我将解释如何使用 ModuleLoaderAppDomain 在运行时加载和卸载。

历史

  • 2008 年 4 月 1 日:初始发布
© . All rights reserved.