检查可选模块的可用性
本文关键字:可用性 模块 检查 | 更新日期: 2023-09-27 18:18:08
我正在为Unity编写一个c#项目,这是一个由几个模块组成的框架,一个核心模块和几个可选模块。
在核心模块中,一些代码需要检查某个可选模块是否存在,以便能够添加与该可选模块相关的组件。这一切都发生在编辑模式下。
我首先认为我可以通过在可选模块的类中设置#define来使用编译器指令来实现这一点,然后简单地检查/排除核心模块中的代码部分。但是这个选项是次优的,因为它只在Visual Studio构建属性中设置那些定义时起作用(我不能要求购买我的框架的用户这样做)。
还有哪些方法可以实现核心模块检查可选模块是否可用的要求?
如果我没理解错的话,这听起来就像是核心模块对可选模块了解太多,使得耦合设计走错了方向。核心模块不应该检查已知的可选程序集列表。这样做会在主程序集与子程序集之间引入不必要的耦合。核心模块独立于"可选模块"不是更好吗?
还有哪些方法可以实现核心模块检查可选模块是否可用的要求?
插件系统
也许可以考虑一个插件系统,其中"核心模块"仅负责加载可能存在的任何模块。也许模块仅仅是子文件夹Plugins(或 modules )中的. dll。每个模块可能有一个主模块类,该主模块类继承了已知的基类或实现了特定的IPlugin
接口。加载后,插件将适当的组件而不是核心模块添加到编辑器。
- 每个插件都是一个专家,它单独向编辑器添加必要的组件
- 核心模块与模块/插件解耦
- 核心模块不知道插件中暴露的功能。
- 不需要
#define
我不是说你需要引入Microsoft MAF或MEF,只是一个最小的工作机制,可以根据插件dll的存在动态加载可选代码。