最佳做法是在生产代码中调用container.Verify()
吗?我正想着搬到:
#IF Debug
container.Verify();
#ENDIF
我没有任何真正的理由做出改变,只是对一般的共识/最佳做法感到好奇。
答案 0 :(得分:8)
调用Verify
是否有用是有争议的。早在2011年,Mark Seemann确实想到了such a method is close to worthless。我的观点是,调用Verify
有真正的价值,但我理解马克的观点,并同意单独调用Verify
通常是不够的。这就是为什么Simple Injector wiki中Verifying the container’s configuration有关于保持DI配置可验证的明确指导的原因。
但是,使用Simple Injector,Verify
除了测试是否可以创建对象图之外,还有很多功能。致电Verify
将启动Simple Injector Diagnostic Services,它会搜索非常常见但有时非常难以发现的配置错误(这是Mark写的时候没有的功能那篇文章)。
一般来说,我的建议是尽可能在生产代码中调用container.Verify
。无论是在调试版本还是发布版本,暂存环境和生产环境中,都应始终在启动时调用它。
随着应用程序变得越来越大,在启动期间调用container.Verify
会变得更加耗时。某些类型的应用程序对此比其他类型更敏感。对于服务器应用程序,通常可以有更长的启动时间,而桌面和移动电话应用程序必须更快地启动。
一旦你进入调用Verify
花费太多时间的位置 - 但只有那时 - 你应该删除对Verify
的调用,但至少仍然有一个单元/集成测试致电container.Verify
。我认为在编译器指令中包装Verify
没有问题(正如你在问题中所做的那样),但请注意IMO你应该尽可能长时间地推迟删除你的启动路径中Verify
的调用。