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

tri*_*ris 6 c# simple-injector

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

#IF Debug
    container.Verify();
#ENDIF
Run Code Online (Sandbox Code Playgroud)

我没有任何真正的理由做出改变,只是好奇一般共识/最佳实践是什么.

Ste*_*ven 8

无论是否有用,Verify都可以进行辩论.早在2011年,Mark Seemann确实认为这种方法几乎毫无价值.我的观点是,呼唤有真正的价值Verify,但我理解马克的观点并同意单独呼叫Verify通常是不够的.这就是为什么在Simple Injector维基中有关验证容器配置的明确指导,可以保证您的DI配置可验证.

但是,使用Simple Injector,Verify除了测试它是否可以创建对象图之外,还有更多功能.致电Verify将启动Simple Injector的诊断服务,该服务搜索非常常见但有时非常难以发现的配置错误(Mark在撰写该文章期间无法使用的功能).

一般来说,我的建议是container.Verify尽可能长时间调用您的生产代码.始终在启动时调用它,包括调试和发布版本,暂存环境和生产环境.

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

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