ここで、接続文字列は、n層asp.netアプリケーションに格納されるべきです
-
26-09-2019 - |
質問
皆さん、
私は名前空間によって、かなりn層であるASP.NETプロジェクトを持っていますが、私は3つのプロジェクトに分離する必要があります。データ層、中間層およびフロントエンド
私はこれをやっているので...
A)それを行うには正しいことと思われる、と
B)私は、ASP.NETのアセンブリを主催するためにユニットテストを実行しているあらゆる種類の問題を抱えています。
とにかく、私の質問は、あなたの設定情報を保持しないどこ?
(LINQ to SQLのを使用しています)今のところ、例えば、私の中間層クラスに自動的に新しいデータコンテキストをインスタンス化する際に、web.configファイルからの接続文字列情報を引き出します。
私のデータ層が別のプロジェクトにある場合することができます/それは、構成情報のためのweb.configファイルを使用すべきですか?
もしそうであれば、どのように(典型的には別のアセンブリで)ユニットテストは、SOCH構成情報を提供する
お時間をいただき、ありがとうございます!
解決
私たちは、XMLであることを起こるグローバル「設定」ファイルに保管してください。このファイルには、適切なのサーバーのと同様に、ユーザー名とパスワードへの接続文字列のポインティングそのうちの1つは、すべてのグローバル設定が含まれています。その後、私のアプリケーションは、それを消費するとき、彼らは、接続文字列に必要な特定のカタログ(データベース)を入れます。
私たちは、それぞれの動作環境(PROD、DEV、ステージングなど)のために、ファイルのバージョンを持っています。次に、2つの設定で - ファイルのパスと環境(環境を表すトークンを使用して) - 。私は正しい設定ファイルを拾うことができます。
これはまた、30秒のフェイルオーバーの素敵な利益を有します。設定ファイル内の単純な変更サーバー名とアプリケーション(ウェブ)を再起動します(もちろん、あなたが必要な場合は、あなたのデータを復元する必要がある)の上に失敗しています。
アプリケーションの起動時に(それが異なる場合)そこで、私たちは、web.configファイルに正しい接続文字列を書き込みます。これにより、我々は1つのappSettingsの値を変更することにより、PRODにDEVからウェブサイトを変更することができます。
他のヒント
限り、あまり存在しないとして、それはweb.configファイルでそれを持っていると便利です。もちろん、あなたのDALは、それはそこから来ていることが絶対見当もつかないはずです。
何かをする時に呼び出されたときに、あなたのデータ層は、その設定情報を与えられることに、ウェブコールが入って来たときに何かをする時に呼び出されるため、良いオプションがある。先に行くとあなたの情報を入れますweb.configファイル。私の現在のプロジェクトでは、私は私が私のglobal.asaxから呼び出されたルーチンでそのように記入して、私のデータ層、内の接続文字列の静的辞書を持っています:
CAPPData.ConnectionStrings(DatabaseName.Foo) =
ConfigurationManager.ConnectionStrings("FooConnStr").ConnectionString()
CAPPData.ConnectionStrings(DatabaseName.Bar) =
ConfigurationManager.ConnectionStrings("BarConnStr").ConnectionString()
etc.
「注入」それ、このようなののことができ、あなたのDALをテストする場合はどのように/によっては、自動テストの目的のために良いこと。私にとって、それは私が別の設定ファイルを作成したくなかったという理由だけです。
はデフォルトのctorでインスタンス化のDataContextをしません。コンストラクタに接続文字列情報を渡します。
私は、他のクラスへのデータ、コンテキスト注入コンテキストに注入接続するのIoCフレームワークを使用することを好む。