5

皆さん、

名前空間によってかなり n 層の ASP.NET プロジェクトがありますが、データ層、中間層、およびフロント エンドの 3 つのプロジェクトに分ける必要があります。

私はこれをやっているので...

A) それは正しいことのように思えます。

B) ASP.NET でホストされているアセンブリの単体テストを実行する際に、さまざまな問題が発生しています。

とにかく、私の質問は、設定情報をどこに保管していますか?

たとえば現在、私の中間層クラス (Linq to SQL を使用) は、新しいデータ コンテキストをインスタンス化するときに、web.config から接続文字列情報を自動的に取得します。

私のデータレイヤーが別のプロジェクトにある場合、構成情報に web.config を使用できますか?

もしそうなら、単体テスト(通常は別のアセンブリで)はどのようにsoch構成情報を提供しますか?

お時間をいただきありがとうございます!

4

3 に答える 3

2

それらは、たまたま XML であるグローバルな「設定」ファイルに保持されます。このファイルには、すべての GLOBAL 設定が含まれています。そのうちの 1 つは、適切なサーバーを指す接続文字列と、ユーザー名とパスワードです。次に、アプリケーションがそれを使用するときに、必要な特定のカタログ (データベース) を接続文字列に入れます。

各動作環境 (prod、dev、staging など) 用のファイルのバージョンがあります。次に、ファイル パス (環境を表すトークンを含む) と環境の 2 つの設定を使用して、正しい設定ファイルを取得できます。

これには、30 秒のフェイルオーバーという優れた利点もあります。設定ファイルでサーバー名を変更し、アプリケーション (Web) を再起動するだけで、フェイルオーバーが完了します (もちろん、必要に応じてデータを復元する必要があります)。

次に、アプリケーションの起動時に、正しい接続文字列を web.config ファイルに書き込みます (異なる場合)。これにより、1 つの appSettings 値を変更するだけで、Web サイトを DEV から PROD に変更できます。

于 2010-09-29T20:09:58.160 に答える
2

多すぎない限り、web.config にあると便利です。もちろん、あなたの DAL には、それがそこから来ているという手がかりはまったくないはずです。

適切なオプションは、何かを行うように要求されたときにデータ層に構成情報を与えることです。Web 呼び出しが入ったときに何かを行うように要求されます。先に進んで、web.config に情報を入れてください。 . 現在のプロジェクトでは、データ層に接続文字列の静的辞書があり、global.asax から呼び出されるルーチンで次のように入力します。

CAPPData.ConnectionStrings(DatabaseName.Foo) = 
    ConfigurationManager.ConnectionStrings("FooConnStr").ConnectionString()
CAPPData.ConnectionStrings(DatabaseName.Bar) = 
    ConfigurationManager.ConnectionStrings("BarConnStr").ConnectionString()
etc.

このように「注入」することは、DAL をテストする方法/場合に応じて、自動テストの目的に適しています。私にとっては、別の構成ファイルを作成したくなかったからです。

于 2010-09-29T20:12:25.217 に答える
0

テスト目的で、DataContext をデフォルトの ctor でインスタンス化しないでください。接続文字列情報をコンストラクターに渡します。

IoC フレームワークを使用してデータ コンテキストに接続を挿入し、次にコンテキストを他のクラスに挿入することを好みます。

于 2010-09-29T20:08:55.847 に答える