私は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個のインスタンスを作成し、接続文字列を渡す必要があります。
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
Chris、実際のプログラムははるかに大きく、実際のプログラムのプロトタイプを指定しました。私がオペレーションクラスに似た15〜20の異なるクラスを持っているとしたら、これらのクラスのそれぞれに接続文字列を渡したくないとします。 – Arjmand
これらのクラスに接続文字列を渡さない理由は何ですか?彼らは使用する接続文字列を知る必要があるので、必要な接続を識別するために*何かを渡す必要があります。なぜ接続文字列自体ではないのですか? – Chris