构造函数中的连接字符串

Connection String in Constructor

现在我可以通过执行以下操作在每个方法中调用它来在我的 class 中建立连接。

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

唯一的问题是我必须在每个方法中调用它。有人告诉我,最好为 class 创建一个构造函数,并将它使用的连接字符串传递给构造函数。

这是我的尝试,但似乎无法弄清楚,因为我仍然无法在方法中达到它。

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

最好的方法是什么?提前致谢。

您应该将传递的连接字符串存储在所有 class 方法中可用的全局变量中

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

当然这意味着每次创建此实例时 class 都需要将连接字符串传递给构造函数

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

所以每次创建实例时最好使用构造函数自动提取连接字符串

Private String gs_conString

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

选择第一个选项,将连接字符串放入构造函数中。您不希望 class 直接依赖于 <appSettings>

您的 class 的界面应该指出它有哪些依赖项。当您将连接字符串放入构造函数时,class 表示,"Hey, I need a connection string!"

如果 class 调用 <appSettings>,则 class 的用户无法知道 class 期望在那里找到连接字符串,除非他们打开你的代码并阅读它。如果他们不知道连接字符串属于那里,那么他们将得到一个没有任何解释的空引用异常。

这就提出了一个问题 - 无论 class 创建了 你的 class, 从哪里获得连接字符串以便它可以将它传递给构造函数?依赖注入就是答案。它使您能够以这种方式编写 classes 然后 "wire it up" 以便将正确的参数传递给您的构造函数。