2014-06-11 19 views
6

在生產代碼中調用container.Verify()是否是最佳實踐?我想移動到的:生產代碼中的簡單注射器Verify()

#IF Debug 
    container.Verify(); 
#ENDIF 

我沒有任何真正的理由做出改變,只是好奇,普遍的共識/最好的做法是什麼。

回答

7

致電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的調用。

+0

感謝您的迴應,史蒂文。如果我要這樣做,我已經計劃將它保留在集成/單元測試中,以保證以某種形式運行預部署。 – Tris