web-dev-qa-db-ja.com

ContainerControlledLifetimeManagerとHierarchicalLifetimeManagerの主な違いは何ですか?

ContainerControlledLifetimeManagerとHierarchicalLifetimeManagerの一般的な違いは何ですか? ContainerControlledLifetimeManagerは、DIコンテナであるシングルトンを表し、依存関係が必要なタイプごとに新しいインスタンスを作成することを知っています。 ライフタイムマネージャーについて についての役立つ記事を読みました。コンテナーによって作成されたインスタンスのハッシュコードを異なるライフタイムマネージャーと比較しました。 ContainerControlledLifetimeManagerを使用すると、各リクエストで同じインスタンスを取得しましたが、HierarchicalLifetimeManagerを使用すると、異なるハッシュコードを取得しました。記事に記載されているように、子コンテナごとに独自のインスタンスが作成されます。よくわかりません。親と子は同じインスタンスを持っていますか?子供がいないとどうなりますか?このライフタイムマネージャーをいつ使用する必要がありますか?説明して頂けますか?

11
Joseph Katzman

ContainerControlledLifetimeManagerは、コンテナーの存続期間をスコープとする登録済みタイプのシングルトンインスタンスを解決します

HierarchicalLifetimeManagerは、解決を実行したコンテナーのライフタイムをスコープとする、登録されたタイプのシングルトンインスタンスを解決します(ただし、必ずしもタイプが登録されたコンテナーではありません)。

アプリケーションが単一のコンテナーのみを使用する場合、HierarchicalLifetimeManagerContainerControlledLifetimeManagerの動作に違いはありません。

ただし、アプリケーションがセッション/リクエストごとに子コンテナを作成し、これらの子コンテナを使用して解決する場合、セッション/リクエストごとに登録されたタイプのシングルトンインスタンスを効果的に取得します

12
user2321864