アプリケーションには、(とりわけ)次のコンポーネントがあります。
MyDbContext:エンティティフレームワークのデータアクセスDBResourceProviderFactory:カスタムResourceProviderFactoryを提供するカスタムIResourceProvider(DBResourceProvider...と呼ばれる)- 他のサービス
- StructureMap
カスタムリソースプロバイダーは、このSO回答MyDbContextで説明されているのと同様に注入されたを使用して、データベースでリソースを検索しています。
これMyDbContextは他のさまざまなサービスでも使用されており、Webアプリケーションであるため、StructureMapsHttpContextScopedメソッドを使用MyDbContextして、リクエストの有効期間をリクエストの有効期間に制限します(このテーマに関する他のSOの質問とその回答を参照してください)。
x.For<MyDbContext>().HttpContextScoped();
ただし、の存続期間IResourceProviderは単一のhttpリクエストに限定されないようです。したがって、最初の要求の後に破棄される参照にDBResourceProviderぶら下がっています。MyDbContext
このライフタイムの不一致をどのように処理できますか?HttpContextスコープのインスタンスを他のすべてのサービスに返す間、StructureMapはトランジェントMyDbContextを返しますか?IDbResourceProvider
それを行うには、2つの異なる実装が必要ですか?マーカーインターフェース?または、Entity Frameworkを使用してローカライズされたリソース(パフォーマンスなど)を最初に検索するのは悪い考えですか?