2011-10-04 14 views
10

私は、社内で配布され、さまざまなアプリケーションで使用されるライブラリを開発しています。このライブラリは、Webコンテキストまたはコンソールアプリケーション内に配備できるという点で、プラットフォームに依存しないものでなければなりません。このフレームワークを使用するアプリケーションのコンテキストに応じて、HTTPリクエストごとまたはスレッドごとにオブジェクトを登録したいと思います。 StructureMapでは、ハイブリッドライフタイムを使用してこれを行うことができます。基本的に、HttpContextが存在する場合、そのオブジェクトはそのスコープになります。それ以外の場合、ThreadLocalStorageはスレッドごとに使用されます。分散ライブラリまたは消費アプリケーションに追加の構成は必要ありません。これはAutofacを使って可能ですか?開発者のスキルレベルの幅広い多様性を考慮すると、私たちの目標は、消費者のための特別な設定を最小化/排除することです。スレッド単位または要求ごとのライフタイムスコープを自動的に選択

私は登録がInstancePerLifetimeScope寿命を使用して、コンテキストに依存しないことができることを理解したが、その後のかかるアプリケーションは、HTTPリクエストにInstancePerLifetimeScope登録をバインドするために、ASP.NET/WCF/MVC統合バイナリを消費するために必要とされています。または、スレッドごとのスコープでは、消費コードはlifetime scope per threadを作成する責任があります。

提案がありますか?

+0

Autofacはカスタマイズされたライフタイムをサポートしていますが、StructureMapの「Hybrid」ライフタイムをエミュレートできませんでしたか? – neontapir

答えて

3

'HttpContext.Current!= null'であるかどうかをチェックしてから、既存のマネージャの1つに委任するのは、独自のライフタイムマネージャを実装するのは簡単です。

しかし、私は各アプリケーションが適切なマネージャー自身を結成することを提案します。たとえば、HttpContextが存在しない可能性があるユニットテストのシナリオがあります。これは、テスト固有の目的のためにライフタイムを手動で制御したい場合があるからです。

+0

カスタムライフタイムマネージャの例を教えてください。 –

+1

https://github.com/autofac/Autofac/blob/4c5f4ca554137f184cb705035011c3a0261c1128/Core/Source/Autofac.Integration.Mvc/RequestLifetimeScopeProvider.cs –

関連する問題