レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

[翻訳]Guice User's Guide ■25. Injecting Between Scopes

スコープをまたいでインジェクトする場合

You can safely inject objects from a larger scope into an object from a smaller scope. For example, you can inject an Http session-scoped object into an HTTP request-scoped object. However, injecting into objects with larger scopes is a different story. For example, if you injected a request-scoped object into a singleton, at best, you would get an error due to not running within an HTTP request, and at worst your singleton object would always reference an object from the first request. In these cases, you should inject a Provider instead and use it to retrieve the object from the smaller scope as necessary.

大きなスコープのオブジェクトを、小さなスコープのオブジェクトへインジェクトする場合は安全です。たとえば、Http セッションスコープのオブジェクトをHpptリクエストスコープのオブジェクトへインジェクトすることができます。しかしながら、大きなスコープのオブジェクトへインジェクトする場合は、話が変わります。たとえば、リクエストスコープのオブジェクトをシングルトンにインジェクトする場合、最も良い場合でも、Httpリクエスト中ではないためエラーになります。リクエストスコープのオブジェクトをシングルトンにする場合、最も良い場合でも、Httpリクエストがエラーによって動作しないようになります。
最悪の場合は、シングルトンオブジェクトが最初のリクエストを参照し続けます。こういったときは、代わりにProviderをインジェクトして、代わりにProviderを使ってインジェクトして、必要に応じてより小さいスコープからオブジェクトを取得するのに、それを使ってください使ってください。