1

另一个“X 的最佳方式”,但我有一个问题,我应该如何设计我正在开发的这个特定软件。

我有这个 C# WPF 软件(我们称之为 ENGINE),它遍历一个任务列表并在每个任务上调用相同的三个方法:initialize()、calculate() 和 save()。

//Simplified obviously (I use indexes vs. foreach because of other code I left out)
while(currentOperatingIndex < tasks.Count)
{
    Task currentTask = tasks.ElementAt(currentOperatingIndex);
    currentTask.initialize();
    currentTask.calculate();
    currentTask.save();
    currentOperatingIndex++;
}

现在这些任务我需要在运行时动态加载到 ENGINE 程序中。当创建新的 TASK 时,引擎程序将永远不会重新构建或更改。所以我设计它,使每个 TASK 都在它自己的库 DLL 中。因此,引擎将在运行时迭代一个 DLL 文件文件夹,并将每个 DLL 加载到程序集中。

我这样设计它是因为每个 TASK 的初始化、计算和保存都不同。例如,假设我要添加一个新任务,我不必更改 ENGINE 的代码或任何其他 DLL,我只需为 TASK 创建一个新的 DLL,确保它具有这 3 个功能,并将其放入文件夹中. 我的目标是,当需要一个新的 TASK 时,程序员可以打开 Visual Studio,创建一个新的 C# 库,创建三个函数,然后编写实现。

这是处理“类似插件”功能的最佳方式吗?

希望我很清楚。

4

2 回答 2

1

定义一个接口(例如ICalcTask)有3个方法:initialize、calculate、save。

编写插件类库 dll,包括实现 ICalcTask 接口的类。

让您的主机应用程序扫描插件目录中包含 ICalcTask 实现的 dll。

于 2013-04-10T19:52:01.197 回答
0

正如 Alexei Levenkov 在对我的问题的评论中提到的,如果您希望在不添加额外代码来包含它们的情况下动态地将插件添加到程序中,请使用 MEF,它将许多插件导入目录中,您可以从那里使用它。谢谢各位的意见。

于 2013-04-10T20:15:21.753 回答