2017-02-21 3 views
3

私は現在、2つのプロジェクトを含むASP.netのソリューション上にあります。 1つはMVCプロジェクト、もう1つはAPIとしてのクラスライブラリです。ASP.NETとapp.config APIのConnectionString

enter image description here

現在、私は私のプロジェクトのMVCのWeb構成でこのような接続文字列を持っています。

enter image description here

私は私のAPIで、次のコードでそれを読む:問題は、私は私のAPIのApp.configファイルで、デフォルトでは、接続文字列を移動したいということです

public ConnectionProvider() 
{ 
    this.connectionString = ConfigurationManager.ConnectionStrings[Connection.Name].ConnectionString.ToString(); 
    factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings[Connection.Name].ProviderName.ToString()); 
} 

起動するたびにweb.configに読み込まれます。

+1

は、クラスライブラリのリソースファイルを作成し、そこからそれをフェッチ? –

+0

もちろん、Webアプリケーションはweb.configを使用し、Windowsアプリケーションはapp.configを使用します。参照されるプロジェクトは親の設定で実行されます。 Deiter Bによって提案されたソリューションを試すことができます。 – jomsk1e

+0

apiから接続文字列をコピーしてweb.configに追加するだけです。リソースファイルを使用することによって、再コンパイルすることなくその接続文字列を更新する方法はありません。リソースファイルを使用することは悪い考えです。 – Nkosi

答えて

0

リソースファイルを使用することは悪い考えです。

apiから接続文字列をコピーしてweb.configに追加するだけです。リソースファイルを使用することによって、再コンパイルすることなくその接続文字列を更新する方法はありません。

Webアプリケーションはweb.configを使用し、そこから接続文字列にアクセスできます。同じapiを別のプロジェクト、例えばデスクトップアプリケーションで再利用する場合は、接続文字列をエントリポイントの設定ファイルにコピーしてください。

0

私はコメントを介して提案したとおり、私はクラスライブラリのリソースファイルを使用します。

@ Nkosiはconnectionstringが静的ではない間違いではありませんが、実際のAPIまたはデータベース呼び出しを持たずにconnectionstringを渡すのが最も簡単な方法です。

ただし、再公開する必要があるのはアプリケーション全体ではありません。 クラスライブラリのコードの機能が変更されない場合は、単にクラスライブラリを作成してそのライブラリの.dllを上書きすることができます。

もう一つの有益な解決策は、すべてのソリューションで使用される個別のテキストファイルに接続文字列を保存することです。 次に、すべてのアプリケーションでそのコードを置き換えることができますが、1つの集中化されたアクセスポイントはありません。

0

(OPに代わって掲載された解決策)

Dieter Bに感謝します!

enter image description here

そしてAPIでそれを読むために::リソースファイルで

public ConnectionProvider() 
{ 
    ResourceManager rm = new ResourceManager("Bank.Project.API.resources", GetAssemblyByName("Bank.Project.API")); 

    this.connectionString = rm.GetString(Connection.Name); 
    this.factory = DbProviderFactories.GetFactory(rm.GetString(Connection.Factory)); 
} 

Assembly GetAssemblyByName(string name) 
{ 
    var Myassembly = AppDomain.CurrentDomain.GetAssemblies(). 
      SingleOrDefault(assembly => assembly.GetName().Name == name); 
    return Myassembly; 
} 
関連する問題