スレッドセーフなコンポーネントを多用するサーバーサイドアプリがあるとしましょう。ここで説明するように、必要になるたびに新しいコンポーネントインスタンスを作成する代わりに、Autofacを使用して、システムの起動時にこのコンポーネントのシングルトンインスタンスを登録、管理、および解決します。
ここで私の質問は次のとおりです。Autofac登録にもかかわらず、このコンポーネントの新しいインスタンスがComponentName c = new ComponentName();
ソースコードのどこかでプログラムによって初期化された場合()はどうなりますか。
これが私の仮定です:
(ケース1)初期化ステートメントがAutofac DIコンテナーが定義されているアプリアセンブリに属するソースコードの一部である場合、Autofacはコンポーネントの登録済みシングルトンインスタンスを返します。
(ケース2)初期化ステートメントが外部のサードパーティライブラリのソースコードに属している場合、ステートメントが実行されるたびにコンポーネントの新しいインスタンスが作成されます。Autofacには役割がありません。
私の仮定は正しい方向に進んでいますか、それとも完全に間違っていますか?
よろしく、マティアス
Autofacは、解決されないオブジェクトインスタンスを制御せず、「認識」しません。依存関係をシングルトンとして登録すると、Autofacに依存関係を解決する方法(同じインスタンスを再利用する方法)が指示されます。それまでの間、同じクラスのインスタンスをいくつでも作成できます。
依存関係をシングルトンとして登録しても、指定されたクラスが実際にシングルトンになるわけではありません。「実際の」シングルトンでは、インスタンスを取得するためのすべての呼び出しが同じインスタンスを返すため、クラスのインスタンスは1つしか存在できません。依存関係をシングルトンとして登録すると、クラスがシングルトンであるかのように動作するようにコンテナに指示するだけで、新しいインスタンスを作成するのではなく、1つのインスタンスを再利用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加