我的数据访问层从DBConfig静态类获取带有静态字段(ServerName,DBName,UserName,Password)的连接数据。
现在我需要与不同的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静态类,以便我可以建立不同的连接
答案 0 :(得分:5)
远离静态类。你在这里的问题清楚地表明了他们为什么会让你陷入严重的麻烦相反,您应该重构代码以使用DBConfig的实例,并将该实例注入需要它的位置。
答案 1 :(得分:0)
解决问题的一种 Wful方法是在另一个域中实例化您的对象(最小更改)。
MarshalByRefObject
子类。CreateInstanceAndUnwrap
对象的AppDomain
方法在另一个域中使用单独的静态域创建对象。有关详细信息,请参阅Here
B etter方式是重构您的代码:
您的代码将是这样的:
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;}
}
}
注意:每次创建一个有凝聚力的类并且您认为只需要该类的一个实例时,请将您的类设为单例。
答案 2 :(得分:0)
我通过在
之间放置一段代码来解决它 //permanently change DBConfig Fields
DBConfig.SetGLConnection("ziad-pc", "GLTest", "admin", "3343402");
DBConfig.ChangeDatabase(EgxDataType.GLConnection,"GLTest");
// here
DataAccess.CommitDatabaseChanging(); //Retrieve Last Connection Data