生产代码中的简单注入器Verify()

本文关键字:注入器 Verify 简单 代码 | 更新日期: 2023-09-27 18:07:58

在生产代码中调用container.Verify()是最佳实践吗?我在考虑搬到a:

#IF Debug
    container.Verify();
#ENDIF

我没有任何真正的理由去做改变,只是想知道普遍的共识/最佳实践是什么。

生产代码中的简单注入器Verify()

调用Verify是否有用还有待讨论。早在2011年,马克·西曼(Mark Seemann)确实认为这种方法几乎毫无价值。我的观点是,调用Verify有真正的价值,但我理解Mark的观点,并同意单独调用Verify通常是不够的。这就是为什么在简单注入器wiki中有关于验证容器配置的明确指导,关于保持你的DI配置可验证。

然而,对于Simple Injector, Verify所做的不仅仅是测试它是否可以创建你的对象图。调用Verify将启动Simple Injector的诊断服务,该服务搜索非常常见的,但有时很难发现配置错误(Mark写那篇文章的时候还没有这个功能)。 一般来说,我的建议是在您的生产代码中调用container.Verify,只要可行。总是在启动时调用它,无论是在调试和发布版本中,还是在登台环境和生产环境中。

随着应用程序变大,在启动期间调用container.Verify变得更加耗时。某些类型的应用程序比其他类型的应用程序更敏感。对于服务器应用程序,启动时间较长通常是可以接受的,而桌面和移动电话应用程序必须启动得更快。

一旦您进入到调用Verify花费太多时间的位置-但只有这样-您应该删除对Verify的调用,但至少仍然有一个调用container.Verify的单元/集成测试。我认为在编译器指令中包装Verify没有问题(正如你在问题中所做的那样),但再次注意,IMO你应该尽可能长时间地推迟在启动路径中删除对Verify的调用。