检查可选模块的可用性

本文关键字:可用性 模块 检查 | 更新日期: 2023-09-27 18:18:08

我正在为Unity编写一个c#项目,这是一个由几个模块组成的框架,一个核心模块和几个可选模块。

在核心模块中,一些代码需要检查某个可选模块是否存在,以便能够添加与该可选模块相关的组件。这一切都发生在编辑模式下。

我首先认为我可以通过在可选模块的类中设置#define来使用编译器指令来实现这一点,然后简单地检查/排除核心模块中的代码部分。但是这个选项是次优的,因为它只在Visual Studio构建属性中设置那些定义时起作用(我不能要求购买我的框架的用户这样做)。

还有哪些方法可以实现核心模块检查可选模块是否可用的要求?

检查可选模块的可用性

如果我没理解错的话,这听起来就像是核心模块对可选模块了解太多,使得耦合设计走错了方向。核心模块不应该检查已知的可选程序集列表。这样做会在主程序集与子程序集之间引入不必要的耦合。核心模块独立于"可选模块"不是更好吗?

还有哪些方法可以实现核心模块检查可选模块是否可用的要求?

插件系统

也许可以考虑一个插件系统,其中"核心模块"仅负责加载可能存在的任何模块。也许模块仅仅是子文件夹Plugins(或 modules )中的. dll。每个模块可能有一个主模块类,该主模块类继承了已知的基类或实现了特定的IPlugin接口。加载后,插件将适当的组件而不是核心模块添加到编辑器

  • 每个插件都是一个专家,它单独向编辑器添加必要的组件
  • 核心模块与模块/插件解耦
  • 核心模块不知道插件中暴露的功能。
  • 不需要#define

我不是说你需要引入Microsoft MAFMEF,只是一个最小的工作机制,可以根据插件dll的存在动态加载可选代码。