5

私の.net 4ソリューションでは、Webアプリケーションプロジェクトとクラスライブラリプロジェクトという2つの異なるプロジェクトがあります。ソリューションのクラスライブラリプロジェクトで接続文字列を取得

Webアプリケーションプロジェクトでは、データベース接続文字列はweb.configファイルにあります。クラスライブラリプロジェクトからその接続文字列にアクセスしたいと思います。出来ますか?はいの場合、どうですか?

接続文字列を取得する方法がある場合は、教えてください。

答えて

5

クラスライブラリからアクセスするには、System.Configurationへの参照を追加してからSystem.Confinguration.ConfigurationManager.ConnectionStringsを使用してください。

クラスライブラリからこれを読み取ることは理想的ではありません。結局のところ、あなたのクラスライブラリは常に設定ファイルで何かによって消費されると言うことができますか?あなたが他の開発者、特に異なるプラットフォームの開発者とそれを共有するのであれば、確かにそうではありません。

は考えてみましょう:

  1. のIoC - 構成設定が含まれている依存関係を提供するために、依存性注入を使用します。これらは消費するライブラリ(Webアプリケーション)によって設定されます。
  2. 依存する要素を消費するときに、設定をクラスライブラリに渡します。

例えば:

public class MyLibraryContainer 
{ 
    private string _connectionString; 

    public MyLibraryContainer(string connectionString) 
    { 
     _connectionString = connectionString; 
    } 
} 
+0

"あなたのクラスライブラリは常に設定ファイルで何かによって消費されると言うことができますか?"ライブラリはC#で書かれているので、これは正当な前提だと思います。つまり、クラスライブラリの 'ConfigurationManager'に直接アクセスするのは間違っています。なぜなら、この機能はライブラリのスコープの外にあるからです。 –

+1

@EladLachmi "ライブラリはC#で書かれているので、これは正当な前提だと思います"。同意しません。ライブラリがC#で書かれているからといって、それが.NETソリューションによって消費されるわけではありません。それは、例えば、iterop'dされる可能性がありますjavaや何か他のことが問題です。呼び出し元がサポートしていないライブラリーで構成マネージャーを使用した場合、どうなるのか不思議です。 TODOリストの1つがあります! :) –

+0

@EladLachmi一方、あなたがこれを書いて、それを共有するつもりがないなら、より安全な仮定になります。 –

1

Webアプリケーションプロジェクトで、接続文字列を返す静的メソッドを持つ静的クラスを作成し、参照をクラスライブラリプロジェクトに配置し、作成したメソッドを呼び出します。

+0

これは、これまでで最も簡単な解決策です。 –

+7

この静的クラスにアクセスするためにクラスライブラリがWebプロジェクトを参照する必要があり、Webプロジェクトがすでにクラスライブラリを参照しているため、循環参照エラーは発生しませんか? – ScubaSteve

+0

これは適切な解決策ではありません。別のプロジェクトでクラスライブラリを参照する必要があるので、クラスライブラリにwebappリファレンスを追加するのは適切ではありません。この場合、クラスライブラリの依存関係はなくなりました。 –

関連する問題