ベースクラス インジェクション
これはベースクラスでインジェクションを行うというお気に入りの方法です。メリットは、特別なコンテナフレームワークが必要ない点です。ベースクラスがコンポーネントに対するインジェクションの管理を行います。このため、インスタンス管理を柔軟にできるので、SingletonやPrototype以外のライフサイクルを行うことが可能になります。たとえば、WebのセッションやWindows画面のライフサイクルと同じにすることが簡単にできます。マスタデータのキャッシュを画面のライフサイクルと一致させたい場合など役に立ちます。
典型的な利用方法は、レイヤやコンポーネントタイプごとに作成されたベースクラス(Layer Supertype)を作成してインジェクションを管理するコードを含める方法です。
ベースクラスをホットスポットにするような考えかたかな。
デメリットは、なんといってもベースクラスが必要な点ですな。(笑)
ちなみに、.NETではEnterprise Libraryで導入されたDIとしてObjectBuilderがありますが、このObjectBuilderでは柔軟なライフサイクルができるようですね。
MSチームの好きな?パイプライン(+ポリシー)アーキテクチャで作成されています。
参考資料
Inversion of Control コンテナと Dependency Injection パターン
http://www.martinfowler.com/articles/injection.html (英文)
http://kakutani.com/trans/fowler/injection.html (日本語)