0

階層化されたアプリケーションでDbContextperの1つのインスタンスをどのように使用できるかを考えてきました。HttpRequest私が思いついた解決策の1つは、イベントハンドラーHttpModuleでコンテキストのインスタンスを初期化し、それをイベントハンドラーで破棄するを作成することです。HttpContext.Current.ItemsBeginRequestEndRequest

ただし、上記のアプローチには問題があります。保存されたDbContextインスタンスを取得するには、データ層とビジネス層でSystem.Webを参照する必要があります。これはおそらく大丈夫ですが、私はそのルートに行くのを避けたいと思います。Web以外のアプリケーションからデータ層とビジネス層を参照して使用したい場合はどうなりますか?

何か案は?

4

2 に答える 2

1

依存性注入を使用できます。メソッドを使用してインターフェイスIContextHolderを作成し、コンテキストを取得して、Web アプリケーションから下位層にインスタンスを挿入するだけです。このインターフェイスの実装は、アプリケーションの種類によって異なります。コンテキスト インスタンスの実ストレージへのアクセスをラップします。

于 2012-11-27T09:19:27.367 に答える
0

最も簡単な解決策の 1 つは、データ コンテキストへのアクセスをファサード/ゲートウェイ クラスの静的プロパティにラップすることです。

このように、Web アプリケーションでは、プロパティは にアクセスし、HttpContext.Current.Itemsそこにコンテキストを保存できます。一方、http コンテキストが欠落している場合は、Web 以外のアプリケーションに対して他のライフタイム管理ポリシーを実装できます。

public static TheDbContext Current {
  get {
     if ( HttpContext.Current != null ) {
        // lifetime management for a web app
        // e.g. with the Items container
     }
     else {
        // lifetime management for a non-web app
     }
  }
}

ファサード自体はデータ層の一部である必要はありませんSystem.Web。データ層で参照する必要はありません。

于 2012-11-27T09:23:32.693 に答える