在使用C#/。NET进行一系列内部项目的多年中,我们已经使一个库有机地发展成为一大堆东西。它被称为“ Util”,我敢肯定你们中的许多人在您的职业生涯中见过这些野兽之一。
该库的许多部分都是非常独立的,可以分成单独的项目(我们希望将其开源)。但是,在将它们作为单独的库发布之前,需要解决一个主要问题。基本上,在这些库之间有很多我称之为“可选依赖项”的情况。
为了更好地说明这一点,请考虑一些适合成为独立库的模块。CommandLineParser
用于解析命令行。XmlClassify
用于将类序列化为XML。PostBuildCheck
对已编译的程序集执行检查,如果失败则报告编译错误。ConsoleColoredString
是彩色字符串文字的库。Lingo
用于翻译用户界面。
这些库中的每一个都可以完全独立使用,但是如果将它们一起使用,则将具有有用的额外功能。例如,将CommandLineParser
和都XmlClassify
公开需要的构建后检查功能PostBuildCheck
。同样,CommandLineParser
允许选项文件使用彩色字符串字面量require来提供ConsoleColoredString
,并且它通过支持翻译文档Lingo
。
因此,关键区别在于这些是可选功能。可以将命令行解析器与纯色的无色字符串一起使用,而无需翻译文档或执行任何生成后检查。或者可以使文档可翻译但仍然没有颜色。或既彩色又可翻译。等等。
通过查看该“ Util”库,我发现几乎所有潜在可分离的库都具有将其绑定到其他库的此类可选功能。如果我实际上需要将这些库作为依赖项,那么这些东西根本就不会被弄乱:如果您只想使用一个库,则基本上仍然需要所有库。
是否存在任何建立的方法来管理.NET中的此类可选依赖项?