检查可选模块的可用性

时间:2015-10-18 13:01:11

标签: c# unity3d module

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

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

我首先想到我可以通过在可选模块的类中设置#define然后只检查/排除核心模块中的代码部分来使用编译器指令实现此目的。但是这个选项不是最理想的,因为它只适用于在Visual Studio构建属性中设置这些定义时(我不能要求购买我的框架的用户这样做)。

有哪些其他方法可以满足核心模块检查可选模块是否可用的要求?

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,听起来设计的耦合方式错误,核心模块知道太多关于可选模块。核心模块不应检查可选组件的已知列表。这样做会引入从主装配到子装配的不需要的耦合。核心模块是否独立于"可选模块" 更好?

  

有哪些其他方法可以满足核心模块检查可选模块是否可用的要求?

插件系统

也许考虑一个插件系统,其中"核心模块"仅负责加载可能存在的任何模块。也许这些模块只是儿童插件(或模块)文件夹中的.DLL。每个模块可以有一个主模块类,它继承自已知的基类或实现特定的IPlugin接口。加载后,插件会将相应的组件而不是核心模块添加到编辑器

<强>优势

  • 每个插件都是专家,只需添加编辑所需的组件
  • 核心模块与模块/插件分离
  • 核心模块不知道插件中公开的功能。
  • 不需要#define

我并不是说您需要引入Microsoft MAF MEF ,这只是一种基于插件的存在动态加载可选代码的最小工作机制dll与否。