我在" Form1"中定义了以下内容:
Dim Database As New DatabaseManager
这样我就可以在主窗体的任何地方访问我的所有数据库函数了(数据库连接是通过DatabaseManager类中的" private sub new()"函数初始化的。
这对于在form1中完成的所有查询都很好,但是我还有许多其他类,我希望能够从中访问数据库。
有人知道如何在我的示例中访问已启动的类吗?从现在开始,它以主窗体启动,如果我尝试访问任何其他类函数内的任何函数,它什么都不做(也不会出错)。
我试图弄清楚如何调整一堂课,我可以在任何课程中访问它,我无法弄明白。
谢谢!
答案 0 :(得分:2)
如果你愿意,我会鼓励使用依赖注入。
从本质上讲,它将归结为此。
Private _DatabaseManager as DatabaseManager
Public Sub New(Byval DatabaseManager as DatabaseManager)
InitializeComponent()
_DatabaseManager = DatabaseManager
End Sub
如果您这样做,您可以为所有表单提供相同的DatabaseManager或不同的表单。
当然还有很多东西。但为此你必须深入研究Dependecy Injection和Inversion of control(DI / IoC)
答案 1 :(得分:1)
您可以做的一件事是为DatabaseManager
创建一个工厂,然后让所有其他代码从该工厂调用它。我在VB语法方面做得很差,但在C#中它可能看起来像这样:
public class DatabaseManagerFactory
{
private static DatabaseManager _current = null;
public static DatabaseManager Current
{
get
{
if (_current == null) _current = new DatabaseManager();
return _current;
}
}
}
VB
Public Class DatabaseManagerFactory
Private Shared _current As DatabaseManager = Nothing
Public Shared ReadOnly Property Current As DatabaseManager
Get
If _current Is Nothing null Then _current = New DatabaseManager()
Return _current
End Get
End Property
End Class
接下来的想法是,您的应用程序中需要使用DatabaseManager
的任何内容只需调用DatabaseManagerFactory.Current
即可获得一个共享实例。
请注意,在这种情况下,DatabaseManager
实际上不是单例,如果出于某种原因,您仍然可以在应用程序的其他位置实例化其中一个。如果它应该是一个实际的单例,那么你想要对DatabaseManager
类本身进行一些修改。也许给它一个私有构造函数并直接在类上实现这个工厂?像这样:
public class DatabaseManager
{
private static DatabaseManager _current = null;
public static DatabaseManager Current
{
get
{
if (_current == null) _current = new DatabaseManager();
return _current;
}
}
private DatabaseManager
{
// your initialization of the class
}
}
VB
Public Class DatabaseManager
Private Shared _current DatabaseManager = Nothing
Public Shared ReadOnly Property Current As DatabaseManager
Get
If _current Is Nothing Then _current = New DatabaseManager()
Return _current
End Get
End Property
Private Sub New()
' your initialization of the class
End Sub
End Class
(我鼓励任何更熟悉VB语法的人来编辑这个答案,以便更好地解决这个问题。)
答案 2 :(得分:-1)
在您的Form1中创建并启动databaseManager
,但声明Friend
而不是Dim
。这样你就可以像下面这样写一个引用:Form1.databaseManager