也许这是一个太宽泛的问题,但我仍然想听听什么是最佳实践以及什么被认为是“正确的”。我没有找到类似的主题,可能是因为它是通用的,因此很难搜索。
这一切都始于我们采用了一个 Windows 服务项目并向其中添加了另一个服务。以前,main 方法是我们认为的Composition Root,而我们的 IoC 容器注册代码、app.config 读取等类似的形式以一种或另一种形式存在于 main 方法中。在组装所需的依赖项之后,我们通过调用Resolve
容器并运行它来创建服务。
当我们创建另一个继承自的类时,ServiceBase
我们注意到将 main 作为组合根不再有意义,因为多个服务可能完全不同,因此需要不同的初始化代码。
我在数学上发现的唯一有启发性的帖子是来自 Mark Seemann 的这篇文章,他在其中指出,这OnStart
将是聚合根(在这种特殊情况下)。
一般来说,在选择和适当的组合根时采取的最佳方法是什么?我是否应该将此 Windows 服务场景视为异常值,并为其编写不同的代码,同时将 main 方法保留为其他项目类型的组合根,或者是否有更通用的方法在所有情况下都有效?
也许服务需要非常不同的设置这一事实表明它们应该在多个独立项目中分开,其中 main 将再次用作组合根?
我们通常使用 .Net,但这可能也适用于许多其他编程语言。