在生产代码中调用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/