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

时间:2014-06-11 01:47:07

标签: c# simple-injector

最佳做法是在生产代码中调用container.Verify()吗?我正想着搬到:

#IF Debug
    container.Verify();
#ENDIF

我没有任何真正的理由做出改变,只是对一般的共识/最佳做法感到好奇。

1 个答案:

答案 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的调用。