2013-05-08 7 views
6

私は、autofacコンテナをより良く使うために、既存のコードベースを改造しています。私が抱えている状況は、古典的なパターンでコンテナから直接コンポーネントを解決するために使用される多くのものがあるということです。私はLifetimeScopeを使って適切な作業単位スキームを導入しています。コンポーネントが最も外側のLifetimeScopeで解決されているか確認してください

私が直面している問題は、を実装しているため、一部のコンポーネントを子供LifetimeScopeから解決する必要があり、処分する必要があるということです。彼らが決して起こらない根の範囲で解決されたら。

ルートスコープで一部のコンポーネントが解決されないようにする方法はありますか。私はこれらのケースを1つずつ進んで、必要に応じてスコープを導入しているので、ランタイムのクラッシュは問題ありません。私がこれを行うために考えることができる唯一の方法は、一度ルートライフタイムスコープで解決され、.InstancePerLifetimeScope()で解決される少しのダミーコンポーネントを作成し、それを静的にどこかに格納することです。その後、後のコンポーネントが解決されると、それらのダミーコンポーネントの1つが取得され、ルートスコープ内に存在するものと同じインスタンスであるかどうかが確認されます。それは少しclunkyだし、良い方法がありますか?

答えて

1

あなたは登録「一致生涯の範囲ごとに」を使用して試みることができる:少なくとも一つの祖先寿命の範囲がタグ付けされた寿命の範囲であり、そのタグが"scope"に等しいとき

containerBuilder.RegisterType<Foo>() 
       .As<IFoo>() 
       .InstancePerMatchingLifetimeScope("scope"); 

こうIFooのみ解決することができます。ルートライフタイムスコープには通常タグは付けられていないので、IFooを解決しようとすると、Autofacは例外をスローします。

詳細については、the Autofac wikiを参照してください。

関連する問題