§依存性の注入
Play は依存性注入フレームワークを内部的には使っておらず、(もし必要なら) DI フレームワークの選択権をあなたの手に委ねています。 モデル、サービス、Configuration オブジェクトなど全て透過的に扱え、明示的な設定をするような労力は Play を使う上では必要ありません。
routes と(標準でシングルトンの)コントローラーがどう影響しあうのかに関しての明示的な設定を必要とするケースがあります。
§コントローラーの注入
Play で @
で始まる routes は、play.api.GlobalSettings#getControllerInstance で制御されています。
以下のように route の定義が与えられます。
GET / @controllers.SomeController.index()
アプリケーションの Global
クラス で、 getControllerInstance
オーバーライドした DI フレームワークを使ったコントローラークラスのインスタンスを扱えます。
object Global extends play.api.GlobalSettings {
private val injector = SomeDependencyInjectionFramework
override def getControllerInstance[A](controllerClass: Class[A]): A = {
injector.getInstance(controllerClass)
}
}
§プロジェクト例
一つの DI フレームワークにしても、開発のペースと無数のオプションがあるため、完全なドキュメントを記述するにはこのドキュメントで取り扱える範囲を越えていることを意味します。しかしながら、 DI をどう使ったら最も効果的なのかを示してくれるサンプルプロジェクトがたくさんあります。
§Activator
Typesafe Activator は、開発者が Typesafe のプラットフォームでスタートする手助けをするローカルウェブとコマンドラインのツールです。たくさんのサンプルプロジェクトを一度にダウンロードすることができて、Activator UI を通して進めることのできるチュートリアルが用意されているので、Activator を使うことが強く推奨されています。
§Spring
Spring は Java において人気のある開発ツールで、依存性注入フレームワークをコアとして持っています。 Spring Scala は、Scala と Spring を使った付加的なオプションを提供しているプロジェクトです。
Activator プロジェクトで、 Spring を利用できます。 Activator から 直接 ダウンロードできますし、 https://github.com/typesafehub/play-spring-data-jpa から clone することもできます。
§Subcut
Subcut は、軽量の Scala で書かれた依存性注入フレームワークで、注入可能なクラスを通して設定内容を引き渡すために implicit を使います。
Play の中でどのように Subcut を使うのかを示している Subcut チームによる Github プロジェクトがあります。
https://github.com/dickwall/play-subcut から clone することができ、これは Activator のプロジェクトでもあります。
§Macwire
Macwire は、 Scala マクロで書かれた軽量の依存性注入フレームワークです。
Activator プロジェクトで Macwire を利用できます。
また、Activator から 直接 ダウンロードできますし、
https://github.com/adamw/macwire-activator からも clone できます。
§Guice
Guice は、Java 用に設計された軽量の依存性注入フレームワークです。
Activator プロジェクトで Guice を利用できます。 Activator から 直接 ダウンロードできますし、
https://github.com/typesafehub/play-guice から clone もできます。