2017-02-21 32 views
-1

У меня есть открытый класс с общедоступным общим словарем в vb.net. Конструктор, похоже, не работает. У меня есть точка останова в конструкторе, который не сломается. Также, когда я делаю обновление базы данных, новые значения не отображаются в словаре.Как получить конструктор для открытого класса для запуска

Public Class SkywalkerPolicy 

Public Shared CustomPolicies As Dictionary(Of String, String) 

Shared Sub New() 
    CustomPolicies = New Dictionary(Of String, String) 
    Dim bvin As String = String.Empty 
    Dim title As String = String.Empty 
    Dim poldescr As String = String.Empty 
    Dim dtResult As New DataTable("Result") 
    dtResult.Locale = System.Globalization.CultureInfo.InvariantCulture 
    Dim request As New DataRequest 

    request.Command = "sky_PolicyDictionary_s" 
    request.CommandType = CommandType.StoredProcedure 

    request.Transactional = False 
    Dim result As DataSet 
    result = SqlDataHelper.ExecuteDataSet(request) 

    If Not result Is Nothing Then 
     If result.Tables.Count() > 0 Then 
      dtResult = result.Tables(0) 
      For Each row In dtResult.AsEnumerable 
       bvin = row.Item(1) 
       title = row.Item(0) 
       poldescr = row.Item(2) 
       If CustomPolicies.ContainsKey(title) Then 
        CustomPolicies(title) += poldescr 
       Else 
        CustomPolicies.Add(title, poldescr) 
       End If 
      Next 
     End If 
    End If 

End Sub 
End Class 

Когда я обращаюсь к словарю, любые изменения, внесенные мной в данные, не отображаются.

Dim pol As String = SkywalkerPolicy.CustomPolicies("Orders and Shipping Details") 

Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу заставить конструктор работать?

Или должен ли я иметь дополнительный Sub, который дублирует инициализацию словаря, прежде чем использовать его?

Благодаря

+0

Вы инстанцировании класс как объект где-нибудь ... например. Частная MyPolicy = Новая SkywalkerPolicy? –

+0

Тогда Новый метод должен работать –

+0

я просто попытался, что, как \t \t \t Dim MYPOLICY = Новый SkywalkerPolicy Dim Pol As String = MyPolicy.CustomPolicies («Заказы и детали судоходства») я получаю Acces разделяемой член, постоянный член, член перечисления или вложенный тип через экземпляр; квалификационное выражение не будет оцениваться. – Roger

ответ

-1

У меня есть обходной путь с рутиной Update, которую я называю только перед обращением к словарю. Но я все еще не понимаю, почему я не могу пройти через конструктор. Поэтому, если кто-то может ответить на исходный вопрос, я был бы признателен за обновление. Спасибо.

Public Class SkywalkerPolicy 

Public Shared CustomPolicies As Dictionary(Of String, String) 

Shared Sub New() 
    CustomPolicies = New Dictionary(Of String, String) 
    Dim bvin As String = String.Empty 
    Dim title As String = String.Empty 
    Dim poldescr As String = String.Empty 
    Dim dtResult As New DataTable("Result") 
    dtResult.Locale = System.Globalization.CultureInfo.InvariantCulture 
    Dim request As New DataRequest 

    request.Command = "sky_PolicyDictionary_s" 
    request.CommandType = CommandType.StoredProcedure 

    request.Transactional = False 
    Dim result As DataSet 
    result = SqlDataHelper.ExecuteDataSet(request) 

    If Not result Is Nothing Then 
     If result.Tables.Count() > 0 Then 
      dtResult = result.Tables(0) 
      For Each row In dtResult.AsEnumerable 
       bvin = row.Item(1) 
       title = row.Item(0) 
       poldescr = row.Item(2) 
       If CustomPolicies.ContainsKey(title) Then 
        CustomPolicies(title) += poldescr 
       Else 
        CustomPolicies.Add(title, poldescr) 
       End If 
      Next 
     End If 
    End If 

End Sub 

Public Shared Sub UpdateDictionary() 
    CustomPolicies.Clear() 
    Dim bvin As String = String.Empty 
    Dim title As String = String.Empty 
    Dim poldescr As String = String.Empty 
    Dim dtResult As New DataTable("Result") 
    dtResult.Locale = System.Globalization.CultureInfo.InvariantCulture 
    Dim request As New DataRequest 

    request.Command = "sky_PolicyDictionary_s" 
    request.CommandType = CommandType.StoredProcedure 

    request.Transactional = False 
    Dim result As DataSet 
    result = SqlDataHelper.ExecuteDataSet(request) 

    If Not result Is Nothing Then 
     If result.Tables.Count() > 0 Then 
      dtResult = result.Tables(0) 
      For Each row In dtResult.AsEnumerable 
       bvin = row.Item(1) 
       title = row.Item(0) 
       poldescr = row.Item(2) 
       If CustomPolicies.ContainsKey(title) Then 
        CustomPolicies(title) += poldescr 
       Else 
        CustomPolicies.Add(title, poldescr) 
       End If 
      Next 
     End If 
    End If 
End Sub 

End Class

+0

Вы должны быть более конкретным о том, как вы ожидаете использовать этот класс Roger. Здесь есть два разных ответа в зависимости от того, как вы хотите его использовать. Но мы не можем читать ваши мысли. –

+0

Я использую этот класс для определения словаря политик, которые я могу получить для отображения на веб-сайте. Являясь одним из администраторов этого веб-сайта, я или другой администратор могут обновить политику или добавить новые блоки в соответствии с политикой. Я спрашиваю, почему точка останова, поставленная в constuctor, никогда не ломается. – Roger

+0

Когда должен выполняться конструктор, потому что он не запускается, когда я выхожу из системы и снова включаюсь или когда закрываю веб-сайт, а затем запускаю еще один сеанс отладки Visual Studio. Новые изменения данных никогда не поднимаются. Поэтому я придумал обходной путь. Я все еще изучаю все аспекты веб-программирования и думал, что это будет интересной проблемой для публикации.Я не ожидал критики за публикацию о процессе, который я не понимал. Мне показалось, что я ясно дал понять, что я изменил данные, и конструктор не собирал изменения и перезагружал словарь. – Roger

Смежные вопросы