如何分隔两个静态类
本文关键字:静态类 两个 分隔 何分隔 | 更新日期: 2023-09-27 18:33:22
我的数据访问层使用静态字段(服务器名称,DBName,用户名,密码)从DBConfig静态类获取连接数据。
现在我需要与不同的DBConfig建立两个连接,我尝试创建另一个DLL项目,然后将我的dal添加到其中以从另一个程序集建立另一个连接,当我尝试将结果dll添加为主项目的引用并尝试更改DBConfig数据时,它会更改主项目的dbconfig类字段
主要项目
static void Main()
{
DBConfig.DbName = "InvDB";
DBConfig.Password = "3343402";
DBConfig.ServerName ="ziad-pc";
DBConfig.UserName = "admin";
DBConfig.Lang = "AR";
GLINVSERVICES.ServiceConfig.Init("ZIAD-PC", "GLTest", "admin", "3343402");
}
另一个 DLL 项目
namespace GLINVSERVICES
{
public static class ServiceConfig
{
public static void Init(string ServerName, string DBName, string UserName, string Password)
{
DBConfig.Datatype = EgxDataType.Mssql;
DBConfig.DbName = DBName;
DBConfig.Lang = "AR";
DBConfig.ServerName = ServerName;
DBConfig.UserName = UserName;
DBConfig.Password = Password;
}
}
}
我需要分离DBConfig静态类,以便我可以建立不同的连接
远离静态类。你在这里的问题清楚地表明了为什么他们会给你带来严重的麻烦。 相反,您应该重构代码以使用 DBConfig 的实例,并将该实例注入到需要的位置。
解决问题的一种方法是在另一个域中实例化您的对象(最小更改)。
- 创建一个引用静态类的
MarshalByRefObject
子类。 - 创建新域
- 使用
CreateInstanceAndUnwrap
对象的AppDomain
方法在另一个具有单独静态域的域中创建对象。
有关更多信息,请参阅此处
Better 方法是重构你的代码:
- 将静态类更改为单一实例类。
- 在看到编译器错误的地方,请将其更改为使用单一实例。
- 现在,创建另一个属性来引用您的第二个实例,并将其用于您的目的。
你的代码将是这样的:
public class YourClass
{
private readonly static YourClass _firstInstance = new YourClass();
private readonly static YourClass _secondInstance = new YourClass();
public YourClass Instance{
get { return _firstInstance;}
}
public YourClass AnotherInstance{
get { return _secondInstance;}
}
}
注意:每次创建内聚类时,您认为只需要该类的一个实例,请将您的类设置为单例。
我通过将一段代码放在
//permanently change DBConfig Fields
DBConfig.SetGLConnection("ziad-pc", "GLTest", "admin", "3343402");
DBConfig.ChangeDatabase(EgxDataType.GLConnection,"GLTest");
// here
DataAccess.CommitDatabaseChanging(); //Retrieve Last Connection Data