2016-03-03 52 views
0

現在,我可以通過執行以下操作在每個方法中調用它,從而在我的類中建立連接。構造函數中的連接字符串

Dim sConnectionString As String = ConfigurationManager.AppSettings("Blah") 
    'Establish connection with db 
    Dim cnSqlConnection1 As New SqlConnection(sConnectionString) 

唯一的問題是我必須在每種方法中調用它。我被告知最好爲類nad創建一個構造函數,將它使用的連接字符串傳遞給構造函數。

這是我的嘗試,但似乎無法弄清楚,因爲我仍然無法達到它的方法。

Public Sub New(ByVal sConnectionString As String) 
    sConnectionString = ConfigurationManager.AppSettings("Blah") 
End Sub 

什麼是最好的辦法呢?提前致謝。

回答

1

你應該傳遞的ConnectionString在全局變量可以存儲在您的所有類方法

Public Clas MyClass 

    Private String gs_conString 

    Public Sub New(ByVal sConnectionString As String) 
     gs_conString = sConnectionString 
    End Sub 

    Public Sub AMethod() 
     'Establish connection with db 
     Dim cnSqlConnection1 As New SqlConnection(gs_conString) 
     ..... 
    End Sub 
    ..... 

End Class 

當然,這意味着每次創建這個類的一個實例,你需要通過連接字符串你的構造

Dim cl As MyClass = new MyClass(ConfigurationManager.AppSettings("Blah")) 

所以它可能是更好的使用構造函數來提取連接字符串自動每次你創建一個實例

Private String gs_conString 

Public Sub New() 
    gs_conString = ConfigurationManager.AppSettings("Blah") 
End Sub 
+0

正是我在找的東西 – Slae

1

與第一個選項一起,將連接字符串放在構造函數中。你不想讓你的班級直接依靠<appSettings>

你的類的接口應該指出它的依賴關係。當你把連接字符串放在構造函數中時,類會說:「嘿,我需要一個連接字符串!」

如果類調用<appSettings>,那麼該類的用戶無法知道該類期望在那裏找到連接字符串,除非它們打開您的代碼並閱讀它。如果他們不知道連接字符串屬於那裏,那麼他們將得到一個空引用異常,而無需解釋。

這提出了一個問題 - 無論什麼階級創建類,哪裏獲取連接字符串,以便它可以將它傳遞給構造函數?依賴注入是答案。它使您能夠通過「接線」的方式編寫類,以便將正確的參數傳遞給構造函數。

相關問題