コンポーネントのライフサイクル

DIコンテナで、コンポーネントのライフサイクルを混ぜて使う場合、
Prototype -> Request -> Session -> Application -> Singleton
となるようにしなければなりません(途中が抜けても良い、順番はたぶんあってると思う)。


順番が逆転する場合、例えば Singleton から Prototype のコンポーネントを使用したい場合は、以前 id:aufheben:20050721 で書いたことと関連するけど、あいだに Service Locator をはさむと良い。
Singleton -> ServiceLocator(Singleton) -> Prototype
のような感じ。Service Locator の実装は DIコンテナに単に委譲するだけ。