【发布时间】:2017-08-14 16:54:09
【问题描述】:
我正在使用单例方法,其中我的 C# 类库接受连接字符串并将其存储在静态变量中,而不同的类又使用该变量来执行特定任务。到目前为止,该过程运行良好,但我有一种情况,Windows 消费者应用程序必须创建所述类的 N 个实例,并且每个实例必须同时使用不同的数据库。
显然,静态方法将不再有效,因此我删除了静态变量。我只想知道,除了将连接字符串从一个类传递到另一个类之外,最好的方法是什么?我也尝试使用 Properties.Settings.Default 来存储连接字符串,但是每次创建新实例时它都会覆盖现有字符串!
下面列出了我的整个项目的原型(虽然很小):
我有一个 ConnectionString 类,它的工作是接受连接字符串并将其提供给命名空间中的其他类。
internal class ConnectionString
{
private string _connectionstring { get; set; }
public ConnectionString(string connectionstring)
{
_connectionstring = connectionstring;
//WHERE TO STORE THIS STRING FOR METHODS OF OTHER CLASSES TO CONSUME????
}
}
然后是对数据库执行某些操作的操作类。
internal class Operations
{
public void Operation1()
{
using (var conn = new SqlConnection())
{
//Some operation
}
}
public void Operation2()
{
using (var conn = new SqlConnection())
{
//Some other operation
}
}
public void Operation3()
{
using (var conn = new SqlConnection())
{
//Some other operation
}
}
}
我的 Windows 应用程序想要使用的库公开的类名为 Base。这反过来会消耗上述类来执行整个任务。
public class Base
{
public Base(string connectionstring)
{
var ConnInstance = new ConnectionString(connectionstring);
var OpInstance = new Operations();
OpInstance.Operation1();
OpInstance.Operation2();
OpInstance.Operation3();
}
}
最后,消费者应用程序需要同时创建 n 个 Base 实例并将连接字符串传递给它。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var ins1 = new Base("Data Source=(local);Initial Catalog=DATABASE1; Integrated Security=SSPI;");
var ins2 = new Base("Data Source=(local);Initial Catalog=DATABASE2; Integrated Security=SSPI;");
var ins3 = new Base("Data Source=(local);Initial Catalog=DATABASE3; Integrated Security=SSPI;");
var ins4 = new Base("Data Source=(local);Initial Catalog=DATABASE4; Integrated Security=SSPI;");
var ins5 = new Base("Data Source=(local);Initial Catalog=DATABASE5; Integrated Security=SSPI;");
}
}
感谢您 提前提供任何帮助。
【问题讨论】:
-
当您在
Base中创建该对象时,是否有任何理由不能将连接字符串传递给Operations?那么它会有你传递给基本构造函数的任何连接字符串并做正确的事情吗?这感觉很明显,我敢肯定这不可能是有原因的...... -
Chris,实际程序要大得多,我刚刚指定了实际程序的原型。想象一下,我有 15 到 20 个类似于 Operations 类的不同类,我不想将连接字符串传递给这些类中的每一个。
-
不将连接字符串传递给这些类的原因是什么?他们需要知道要使用什么连接字符串,因此您必须将 something 传递给他们以确定他们需要哪个连接 - 为什么不使用连接字符串本身?
-
这确实是可能的,我已将这种方法作为最后的手段。我觉得每个类都需要存储连接字符串,然后将其传递给其他类,然后再传递给其他类,以此类推。
标签: c# connection-string desktop-application