アプリケーションには、(とりわけ)次のコンポーネントがあります。
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を使用してローカライズされたリソース(パフォーマンスなど)を最初に検索するのは悪い考えですか?