如何分隔两个静态类

本文关键字:静态类 两个 分隔 何分隔 | 更新日期: 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 实例,并将该实例注入到需要的位置。

解决问题的一种方法是在另一个域中实例化您的对象(最小更改)。

  1. 创建一个引用静态类的MarshalByRefObject子类。
  2. 创建新域
  3. 使用CreateInstanceAndUnwrap对象的AppDomain方法在另一个具有单独静态域的域中创建对象。

有关更多信息,请参阅此处

Better 方法是重构你的代码:

  1. 将静态类更改为单一实例类。
  2. 在看到编译器错误的地方,请将其更改为使用单一实例。
  3. 现在,创建另一个属性来引用您的第二个实例,并将其用于您的目的。

你的代码将是这样的:

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