如何在VB NET中创建全局对象

时间:2011-04-01 10:54:39

标签: vb.net global

我正在试图在VB NET中构建一个语言字典,以便能够在应用程序中使用多种语言。

这个字典有一个init方法,它从数据库加载整个字典并将其存储在内存中。

在项目的其余类中,我添加了引用,我可以直接使用该对象而无需创建新实例,因为它们的方法是共享的。

我的问题是我如何加载字典内容,以便其他只访问Language.GetWord方法的类获得集合的正确记录,与My.Settings类相同。

当从任何类使用My.Settings时,将加载值。我正在寻找同样的效果。

这是该类的代码:

Public Class LanguageProvider
    Private Shared CurrentLanguage As Collection

    Public Shared ReadOnly Property GetWord(ByVal Label As String)
        Get
            Try
                Return CurrentLanguage.Item(Label)
            Catch ex As Exception
                Return Label
            End Try
        End Get
    End Property
    Public Shared Sub LoadLanguage(ByVal CultureId As Integer)
        Dim SQLController As New SqlDataAccessController
        SQLController.SQLSentence = "SELECT DNF_CULTURE_LANGUAGE_LABELS.LABEL, DNF_CULTURE_LANGUAGE_LABELS.VALUE FROM DNF_CULTURE_LANGUAGE_LABELS WHERE DNF_CULTURE_LANGUAGE_LABELS.CULTUREID = " & CultureId & " ORDER BY LABEL;"

        SQLController.OpenConnection()
        Dim dr As SqlClient.SqlDataReader
        dr = SQLController.GetData()

        CurrentLanguage = New Collection

        While dr.Read()
            CurrentLanguage.Add(dr.Item("Value"), dr.Item("Label"))
        End While

        dr.Close()
        SQLController.CloseConnection()
    End Sub
End Class

函数LoadLanguage必须在应用程序加载时调用,以便访问数据库一次。

在该属性之后,GetWord必须使用单词访问集合并返回结果。问题是实例不一样,并且在类使用时不加载字典。

感谢。

1 个答案:

答案 0 :(得分:0)

的内容
Public Shared ReadOnly Property GetWord(ByVal Label As String)
    Get
        Try
            If CurrentLanguage Is Nothing then
                  LoadLanguage(theDefaultCultureIdYouWant)
                  ' Now CurrentLanguage is not Nothing any more,
                  ' so LoadLanguage won't be called again
            end if
            Return CurrentLanguage.Item(Label)
        Catch ex As Exception
            Return Label
        End Try
    End Get
End Property

当然,您必须为theDefaultCultureIdYouWant提供一个值,具体取决于您在没有明确提及特定文化的情况下调用GetWord时您想要发生的事情。