2016-03-03 3 views
0

Теперь я могу установить соединение в своем классе, вызвав его в каждом методе, выполнив следующее.Connection String in Constructor

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>, тогда пользователь класса не знает, что класс ожидает найти строку соединения там, если они не откроют ваш код и не прочитают его. Если они не знают, что строка соединения принадлежит там, тогда они получат исключение с нулевой ссылкой без объяснения.

Возникает вопрос - все, что класс создает свой класс, где же он получить строку подключения, чтобы он мог передать его в конструктор? Зависимость инъекции является ответом. Это позволяет вам писать классы, а затем «подключать их», чтобы правильные аргументы передавались вашим конструкторам.