在生产代码中调用container.Verify()是最佳实践吗?我当时正在考虑移至:

#IF Debug
    container.Verify();
#ENDIF

我没有任何真正的理由进行更改,只是对一般共识/最佳实践是什么感到好奇。

最佳答案

调用Verify是否有用还有待商debate。早在2011年,Mark Seemann确实认为such a method is close to worthless。我的观点是,调用Verify具有真正的值(value),但我理解Mark的观点,并同意仅调用Verify通常是不够的。因此,Simple Injector Wiki中的Verifying the container’s configuration上有明确的指南,以确保您的DI配置可验证。

但是,对于Simple Injector,Verify所做的不仅仅是测试它是否可以创建对象图。调用Verify将启动Simple Injector的Diagnostic Services,该ojit_a搜索非常常见但有时很难发现配置错误的功能(在Mark撰写该文章期间该功能不可用)。

通常,我的建议是在可行的情况下,在生产代码中调用container.Verify。在调试阶段和发布版本中,在登台环境和生产环境中,始终在启动时调用它。

随着应用程序的变大,在启动过程中调用container.Verify变得越来越耗时。某些类型的应用程序比其他类型的应用程序对此更敏感。对于服务器应用程序,通常可以有更长的启动时间,而台式机和手机应用程序必须更快地启动。

一旦您确定对Verify的调用花费了太多时间(但只有这样),您才应该删除对Verify的调用,但至少仍要进行一个调用container.Verify的单元/集成测试。我认为在编译器指令中包装Verify没问题(就像您在问题中所做的一样),但是再次请注意,IMO应该将启动路径中对Verify的调用的移除尽可能长时间地推迟。

关于c# - 生产代码中的简单Injector Verify(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24153454/

10-11 17:28