autofac コンテナーをより有効に活用するために、既存のコードベースを作り直しています。私が抱えている状況は、古典的なServiceLocator
アンチパターンでコンテナからコンポーネントを直接解決するために多くのものが使用されているということです。を使用して適切な作業単位スキームを導入しようとしていますLifetimeScope
。
私が直面している問題は、一部のコンポーネントは、LifetimeScope
実装中に子から解決する必要があり、破棄する必要がIDisposable
あることです。それらがルートスコープで解決された場合、それは決して起こりません。
一部のコンポーネントがルート スコープで解決されないようにする方法はありますか? これらのケースを 1 つずつ見ていき、必要に応じてスコープを導入しているので、ランタイムのクラッシュは問題ありません。これを行う唯一の方法は、ルート ライフタイム スコープに対して一度解決され、.xml で解決される小さなダミー コンポーネントを作成し、.InstancePerLifetimeScope()
それをどこかに静的に保存することです。その後、後のコンポーネントが解決されたら、それらのダミー コンポーネントの 1 つを取得し、それがルート スコープ内に存在するインスタンスと同じインスタンスであるかどうかを確認します。少し面倒ですが、もっと良い方法はありますか?