Windows服务,创建具有“全局范围”的类

时间:2014-01-29 16:07:57

标签: vb.net service scope vb.net-2010

VB.NET 2010,Framework 3.5

Windows服务中全局范围的问题/问题

Barebones Window Service,带有两个默认类Class1和Class2

Class1看起来像这样。

Public Class Class1
    Public Hi As String = "Hi"
End Class

下面的主要服务类'OnStart'。 obj1看起来应该具有全局范围

Public Class Service

    Public obj1 As New Class1 ' need obj1 to have global scope

    Protected Overrides Sub OnStart(ByVal args() As String)

    End Sub
End Class

但是,尝试访问Class2中的全局obj1会生成错误“obj1未声明。由于其保护级别可能无法访问”

Public Class Class2
    Public Sub SayHi()
        MsgBox(obj1.Hi) ' error here, obj1 is out of scope
    End Sub
End Class

在Sub Service取代Sub OnStart的非服务应用中,obj1随处可见。所有其他类都可以看到obj1,直到流出Sub Main。

有谁知道怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果Sub Main在模块中,这仅适用于非服务应用程序。

最佳解决方案可能是创建一个包含共享成员的单独类

Public Class CommonObjects
    Public Shared obj1 As New Class1
End Class

然后你可以像这样使用obj1:

Public Class Class2
    Public Sub SayHi()
        MsgBox(CommonObjects.obj1.Hi)
    End Sub
End Class

或者只是创建一个模块并在其中放置Public obj1 As New Class1以使用该对象,而无需指定完全限定名称

在决定选择哪条路线

之前,请参阅此问题的答案Classes vs. Modules in VB.NET以获取更多信息