2011-08-18 12 views
1

データセットを使用してDBからデータを取得し、接続文字列がApp.configファイルにある基本クラス(C#.netを使用して記述)があります。したがって、基本クラスを作成した後は、dllにコンパイルされています。ベースクラスのDB接続文字列をオーバーライドする方法は?

この基本クラスを異なるプロジェクトに使用するには、DB接続文字列をオーバーライドする必要があります。まず可能な限り、誰かが私にその例を教えてもらえますか?

+0

接続文字列がApp.configファイルに書き込まれている場合は、そのプロジェクトに固有のものとなります。あなたが作成したこの基本クラスについて、あなたの質問は何ですか? –

+0

@Ramhound私は他のプロジェクトで使用するために書かれた基本クラスとDBとの基本クラスの会話でいくつかのアクションを実行するので、別のプロジェクトで使用したいときに接続文字列へのアクセスを許可する関数が必要です基本クラスと私はそのような関数をオーバーライドすることができます...それはあなたが使用しているテーブルについて心配するならば、それはまた、一般的にすべてのプロジェクトに最も一般的なログテーブルのような一般的な...私は下の答え... –

答えて

3

を保護された仮想プロパティを作成します。

private readonly string connectionString; 

public Foo() : this(Settings.Default.DbConnectionString) { 
} 

public Foo(string connectionString) { 
    this.connectionString = connectionString; 
} 

その後、派生クラスだけで渡すことができますコンストラクタへの "オーバーライドされた"接続文字列

これは仮想プロパティなどでポリモーフィズムを使用するよりもきれいだと思います。特に、オブジェクトの存続期間中に接続文字列が変更されることはないと思われます。 の動作(これは多態性に適しています)を変更していません - の初期化(これはどのコンストラクタパラメータに適していますか)を変更しています。

+0

私は静的なクラスを使用していますが、これを実行しようとしたときにエラーが返されます エラー-1: 'Cntrs.CountersCache.CountersCache()':静的コンストラクタに明示的な 'this 'または' base 'コンストラクタコール エラー2:' Cntrs.CountersCache.CountersCache(string) ':静的コンストラクタはパラメータなしである必要があります なにか提案を ??? –

+1

@dvlpr:静的クラスを使用している場合、最初は* base *クラスにすることはできません...静的クラスから派生することはできません。私はあなたが離れて静的なクラスを最初から使用することから離れることをお勧めします。 –

+0

はい、あなたは正しいです –

0

私はこのように、あなたのクラスオーバーロードされたコンストラクタを与えることを示唆している、あなたのベースクラスでの接続文字列に

class Base { 
    protected virtual string ConnectionString { get { ... } } // Get from config. 
} 

class Sub { 
    protected override string ConnectionString { get { ... } } // return the new value. 
} 
関連する問題