2017-07-03 5 views
0

私はアプリケーションのライフタイム全体にわたってAutofacコンテナを使用していますが、コンポーネントを自分自身で処理したいと考えています。オートファクト - 外部所有のコンテナ?

IE私はbuilder.RegisterType<SomeType>()を持っている場合、私はRegisterInstanceが大藤使用されている場合は、もちろんコンテナはへの参照を保持する必要があります(コンテナがどこにも参照されない場合でも、生きているものを残しますSomeTypeの参照を保持しませんシングルトン)。

1つのタイプの問題を解決するbuilder.RegisterType<SomeType>().ExternallyOwned()があることがわかりますが、すべてのタイプでそれを書いてはいけません。さらに重要なのは、私もbuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());を使用しています。 ExternallyOwned

コンテナ全体に「ExternallyOwned」を指定する方法はありますか?別の言い方をすると、コンテナにdispose機能全体を無効にし、必要のないオブジェクトへの参照を保持しないように指示します。

+0

私はbuilder.RegisterExternalType ()を書くことができ、明示的に2つのメソッドをどこでも呼び出さずに、あなたが望むものを得ることができるように、ContainerBuilderの拡張メソッドを考えました。 – Mithon

+0

私が言ったように、私は 'builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); ' – tzachs

+0

Ahも使用しているので、十分ではありません。そうですか。私はその部分を逃した。それでは、あなた自身の登録ソースも書いておきます。そして、正直言って、ソースがどれほどスリムであるかを見ると、それほど大きな仕事ではありません。 :) – Mithon

答えて

1

コンテナの廃棄サービスを無効にする方法はありません。あなたはsomething like the logging moduleでフックしようとするかもしれませんが、私は100%働いていないし、あなたの欠けているケースが慎重ではないことが分かりました。

自動追跡と廃棄は、かなり一般的なコンテナ機能です。私はあなたがそれを受け入れるあなたのコードをリファクタリングして戦う代わりにお勧めしたいと思います。人生を楽にするでしょう。

+0

答えをありがとう。自動処理を取り入れるために私のコードをどのようにリファクタリングすることができるのか本当にわかりません。つまり、ユニット・オブ・ワーク・タイプのワークフローを実行しているときには便利な機能です。作業を完了したら、コンテナとそのすべてを廃棄します。しかし、私の場合、私はゲームエンジンを作成し、すべてをカスタマイズできるようにコンテナを使用しています。作業単位はありません。ゲーム開発者はゲーム中に敵を生み出したり、テクスチャ/サウンドエフェクトをロードしたりすることができます。そのため、コンテナとその作成されたオブジェクトの寿命はまったく結びつきません。 – tzachs

+0

これが答え(問題を解決したかどうかにかかわらず、それは実際の質問に対する回答です)であれば、それを受け入れてクレジットを得ることができます。 –

+0

私はまだ誰かが魔法の解決策を思いつくことを期待しています。数日後に回答がない場合、私はあなたの答えを受け入れるでしょう。 – tzachs

関連する問題