2

與在讀取連接字符串中使用的方法相比,您在ASP.NET MVC中從Global.asax.cs 類中注入數據庫連接字符串的好處嗎?從訪問app.config文件的BaseDataProvider類?從app.config注入連接字符串vs從BaseDataProvider類讀取

+1

如果在注入MVC​​的零件(如控制器)的連接字符串你顯然違反了單一職責原則。這將導致難以測試,難以維護代碼。如果您要將連接字符串注入Controller,這意味着控制器直接查詢數據庫,而不是Controller的工作。這是存儲庫或工作單元的工作。控制器應該依賴於那些爲數據庫做些什麼的東西。 – Steven

回答

3

我寧願使用構造函數注入(儘可能)注入任何需要的對象。

我看到的一個小優點是關於類的依賴關係的透明度。

例如,如果你試圖實例化一個測試工具類(同時做集成測試):在第一種情況下(構造函數注入),您可以立即看到,它需要一個連接字符串,並提供

  • 一個在你實例化類(也許使用一個默認的構造函數)第二種情況
  • 和一些審判後&錯誤發現,這取決於ConnectionString屬性被設置

更新: 構造注射方法的另一個優點是,它解耦類本身獲得從app.config中的連接字符串的機制。

這可能會在未來的情景,你甚至不想想現在啓用。

例如,在一個項目中,我目前我的工作有一個具有數據庫訪問組件,我已經在若干情況下重複使用它。在其中一些中,它使用來自配置文件的標準連接字符串,而在另一些中,我有另一個組件根據某些條件決定使用哪個連接字符串。

如果你去的第二個方法,你需要改變,以支持這種功能的代碼。

+0

+1我也會採取注射策略。不要隱藏你的依賴,否則他們遲早會咬你的。 –

0

我通常採取一種混合方法,以便我的BaseDataProvider類具有一個空構造函數,該構造函數默認存儲在配置中的任何內容,但在需要默認連接以外的情況下被覆蓋以接受connString。

然後我的Global.asax類包含必要的邏輯,以確定他們可能需要在特定情況下哪些連接字符串。例如,假設您的Web應用程序已在全球各地的服務器上部署,則您需要連接到最近的可用數據庫服務器以避免延遲問題。因此,對用戶登錄,我就揣摩出我的用戶是再設置它們與相應的連接

相關問題