與在讀取連接字符串中使用的方法相比,您在ASP.NET MVC中從Global.asax.cs 類中注入數據庫連接字符串的好處嗎?從訪問app.config文件的BaseDataProvider類?從app.config注入連接字符串vs從BaseDataProvider類讀取
2
A
回答
3
我寧願使用構造函數注入(儘可能)注入任何需要的對象。
我看到的一個小優點是關於類的依賴關係的透明度。
例如,如果你試圖實例化一個測試工具類(同時做集成測試):在第一種情況下(構造函數注入),您可以立即看到,它需要一個連接字符串,並提供
- 一個在你實例化類(也許使用一個默認的構造函數)第二種情況
- 和一些審判後&錯誤發現,這取決於
ConnectionString
屬性被設置
更新: 構造注射方法的另一個優點是,它解耦類本身獲得從app.config中的連接字符串的機制。
這可能會在未來的情景,你甚至不想想現在啓用。
例如,在一個項目中,我目前我的工作有一個具有數據庫訪問組件,我已經在若干情況下重複使用它。在其中一些中,它使用來自配置文件的標準連接字符串,而在另一些中,我有另一個組件根據某些條件決定使用哪個連接字符串。
如果你去的第二個方法,你需要改變,以支持這種功能的代碼。
+0
+1我也會採取注射策略。不要隱藏你的依賴,否則他們遲早會咬你的。 –
0
我通常採取一種混合方法,以便我的BaseDataProvider類具有一個空構造函數,該構造函數默認存儲在配置中的任何內容,但在需要默認連接以外的情況下被覆蓋以接受connString。
然後我的Global.asax類包含必要的邏輯,以確定他們可能需要在特定情況下哪些連接字符串。例如,假設您的Web應用程序已在全球各地的服務器上部署,則您需要連接到最近的可用數據庫服務器以避免延遲問題。因此,對用戶登錄,我就揣摩出我的用戶是再設置它們與相應的連接
相關問題
- 1. 如何從C#中的App.config文件讀取連接字符串
- 2. 連接字符串不從項目中的App.config中讀取
- 3. 從web.config讀取連接字符串
- 4. Clickonce app.config連接字符串
- 5. App.Config中連接字符串
- 6. 如何從類lib的App.config中使用連接字符串?
- 7. 從app.config中抓取動態更新連接字符串在VB.Net
- 8. 無法從app.config獲取連接字符串
- 9. 連接字符串注入
- 10. 從我的DataAccess庫項目中的app.config讀取連接字符串,用於dbContext
- 11. 使用NUnit時從App.Config讀取連接字符串的問題2.5.2
- 12. 從Azure網站連接字符串配置中讀取連接字符串
- 13. 從字符輸入連接字符串
- 14. 從類庫中讀取連接字符串
- 15. 如何從另一個類庫項目中的app.config獲取連接字符串?
- 16. 從套接字讀取到字符串
- 17. Bash連接少於符號從文件讀取的字符串
- 18. 代碼中的連接字符串vs app.config文件
- 19. 如何使用連接字符串從web.config在asp.net中的app.config
- 20. 將連接字符串從app.config移動到C#代碼#
- 21. 永久更改app.config中的連接字符串從代碼
- 22. 使用app.config文件連接字符串,並從用戶抽象
- 23. 連接字符串已從Web.Config而不是App.Config加載
- 24. 從app.config中檢索mysql連接字符串?
- 25. C#ConfigurationManager從app.config中檢索錯誤的連接字符串
- 26. 從app.config讀取值
- 27. 從串口讀取字符串從Arduino
- 28. 在app.config中加密連接字符串
- 29. 解密連接字符串中的App.config
- 30. App.config連接字符串相對路徑
如果在注入MVC的零件(如控制器)的連接字符串你顯然違反了單一職責原則。這將導致難以測試,難以維護代碼。如果您要將連接字符串注入Controller,這意味着控制器直接查詢數據庫,而不是Controller的工作。這是存儲庫或工作單元的工作。控制器應該依賴於那些爲數據庫做些什麼的東西。 – Steven