在生產代碼中調用container.Verify()
是否是最佳實踐?我想移動到的:生產代碼中的簡單注射器Verify()
#IF Debug
container.Verify();
#ENDIF
我沒有任何真正的理由做出改變,只是好奇,普遍的共識/最好的做法是什麼。
在生產代碼中調用container.Verify()
是否是最佳實踐?我想移動到的:生產代碼中的簡單注射器Verify()
#IF Debug
container.Verify();
#ENDIF
我沒有任何真正的理由做出改變,只是好奇,普遍的共識/最好的做法是什麼。
致電Verify
是否有用可供討論。早在2011年,Mark Seemann確實認爲such a method is close to worthless。我的意見是,在調用Verify
時有實際價值,但我理解Mark的情緒並同意自己調用Verify
通常是不夠的。這就是爲什麼Simple Injector wiki上的Verifying the container’s configuration有關於保持您的DI配置可驗證的明確指南。
但是,使用簡單的噴油器,Verify
不僅僅是測試它是否可以創建對象圖。撥打Verify
的電話將啓動Simple Injector的Diagnostic Services,該搜索非常常見,但有時很難找到配置錯誤(Mark在寫這篇文章時沒有提供的功能)。
一般來說,我的建議是在生產代碼中儘可能長時間地致電container.Verify
。無論是在調試版本還是發佈版本,在分段環境和生產環境中,始終都要稱它爲啓動。
隨着應用程序變得越來越大,在啓動過程中致電container.Verify
會變得更加耗時。某些類型的應用程序比其他應用程序更敏感。對於服務器應用程序,啓動時間較長通常是可以的,而桌面和移動電話應用程序必須更快啓動。
當您進入電話號碼Verify
需要的時間過長時(但只有這樣),您應該將電話號碼除去Verify
,但至少仍然有一個稱爲container.Verify
的單元/集成測試。我發現在編譯器指令中包裝Verify
沒問題(就像你在你的問題中做的那樣),但是再次注意IMO應儘可能延遲在啓動路徑中去除對Verify
的調用。
感謝您的迴應,史蒂文。如果我要這樣做,我已經計劃將它保留在集成/單元測試中,以保證以某種形式運行預部署。 – Tris