软件许可项目:如何避免循环依赖

时间:2013-08-30 15:15:40

标签: loops circular-dependency

标题听起来有点不清楚,我不确定术语。但我的问题是:我现在正在实施我们软件的许可证验证功能,该功能由几个模块组成。例如,函数调用类似于License.IsModuleEnabled(m As Module)(代码在VB.NET中)

现在的情况是,一个模块通常需要另一个模块作为先决条件,例如,要运行ModuleA,还必须启用ModuleB。所以在Module课程中我有一个名为RequiredModules的公共号码,它是Module的列表。所以IsModuleEnabled()函数看起来像这样:

Public Function(m As Module)
   ...     
   For Each module In m.RequiredModules
       If Not IsModuleEnabled(module) Then Return False
   End For
   ...
End Function

问题很明显(但解决方案不适合我):如果ModuleA需要ModuleB,而ModuleB需要ModuleA,则该函数将进入死循环。

这些模块彼此平行,所以我不知道如何管理这样的验证功能。我们当前的解决方案是RequiredModules中只能列出一些“基本”模块,但从长远来看,让所有模块都可以出现在列表中会更好。

1 个答案:

答案 0 :(得分:0)

列出已经验证许可证的所有模块的集合,并在调用可能的冗余验证之前签入此集合。如果集合中没有值,请在此处验证并添加已验证模块的名称。

有另一个类似的列表模块,因为该验证已故意失败,所以我们不会在这种情况下进入无限循环。

如果验证在集合中持续累积直到足以打破循环,验证就会同时发生。