我刚刚在VB.Net工作了一段时间后才开始使用C#。我有一个dll包含常用的数据库连接字符串(和一些其他数据库信息)和另一个包含常用目录路径的DLL。在VB中创建应用程序时,我会在模块中使用这些dll来设置环境以进行测试,因此数据库将指向数据库的QA版本,并且目录将指向我的本地目录。当我准备发布应用程序时,我会将环境设置为生产环境。它看起来像这样。
Module MyModule
Friend MyBizDBs As BizDBs
Friend MyBizPaths As BizPaths
Friend TodaysDate As Date
Friend Sub InitializeModule()
MyBizDBs = New BizDBs(DBReference.BizDatabases.DBConfig.DB_Environment.QA)
MyBizPaths = New BizPaths(BizPaths.PathEnvironment.Test)
TodaysDate = DBReference.BizDatabases.DBMethods.GetTodaysDate
End Sub
End Module
然后我可以在应用程序的开头调用InitializeModule,每当一个类需要连接字符串或目录或这些dll提供的任何其他东西时,它就会指向正确的环境。而且,我不需要每次都创建一个新的MyModule实例。相反,我只能写:
Using sw as new StreamWriter(MyBizPaths.ReconciliationReport)
我知道C#没有模块。我知道静态类是相似的,但我无法初始化对象(MyBizDBs和MyBizPaths)以将它们设置为静态类中的适当环境。我正在查看C#Singleton,但每次调用类时都会重新初始化。有没有更好的方法来实现我在C#中尝试做的事情? 谢谢!
编辑:这是单身人士在C#中的样子。
public sealed class MySingleton
{
private static readonly MySingleton instance = new MySingleton();
private MySingleton() { }
public static MySingleton Instance
{
get
{
return instance;
}
}
public BizPaths MyBizPaths = new BizPaths(BizPaths.PathEnvironment.Test);
public BizDBs MyBizDBs = new BizDBs(DBConfig.DB_Environment.QA);
public DateTime todaysDate = DBMethods.GetTodaysDate();
}
答案 0 :(得分:0)
只有一种方法可以在C#中模拟VB模块,并且使用静态类。编译完成后,VB模块 IS 是一个静态类,显然,如果你想要与VB模块相同的行为,你应该在C#中使用它。不同之处在于模块成员不必在VB中使用其类型名称进行限定,而C#静态类成员则需要进行限定。