私はアプリケーションのライフタイム全体にわたってAutofacコンテナを使用していますが、コンポーネントを自分自身で処理したいと考えています。オートファクト - 外部所有のコンテナ?
IE私はbuilder.RegisterType<SomeType>()
を持っている場合、私はRegisterInstance
が大藤使用されている場合は、もちろんコンテナはへの参照を保持する必要があります(コンテナがどこにも参照されない場合でも、生きているものを残しますSomeType
の参照を保持しませんシングルトン)。
1つのタイプの問題を解決するbuilder.RegisterType<SomeType>().ExternallyOwned()
があることがわかりますが、すべてのタイプでそれを書いてはいけません。さらに重要なのは、私もbuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
を使用しています。 ExternallyOwned
。
コンテナ全体に「ExternallyOwned」を指定する方法はありますか?別の言い方をすると、コンテナにdispose機能全体を無効にし、必要のないオブジェクトへの参照を保持しないように指示します。
私はbuilder.RegisterExternalType()を書くことができ、明示的に2つのメソッドをどこでも呼び出さずに、あなたが望むものを得ることができるように、ContainerBuilderの拡張メソッドを考えました。 –
Mithon
私が言ったように、私は 'builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); ' – tzachs
Ahも使用しているので、十分ではありません。そうですか。私はその部分を逃した。それでは、あなた自身の登録ソースも書いておきます。そして、正直言って、ソースがどれほどスリムであるかを見ると、それほど大きな仕事ではありません。 :) – Mithon