はじめに
PlayのVersionを上げたらGlobalSettingsで怒られたけどonStartの代替のやり方が良く分からない!そんな人向けに中身の解説すっ飛ばして「とりあえず動くようにする」だけの記事。
コード
こいつをapp以下の好きなところにおいて
import javax.inject._
import com.google.inject.AbstractModule
@Singleton
class Global @Inject()(system: ActorSystem) {
onStart()
def onStart(): Unit = {
// やりたいことを書こう!
}
}
class GlobalModule extends AbstractModule {
override def configure(): Unit = bind(classOf[Global]).asEagerSingleton()
}
application.conf
に以下を書き足す
play.modules.enabled += "GlobalModule"
ActorSystem以外に欲しいものが
(system: ActorSystem)
の部分が引数になっているので、欲しいものを追加すればよしなにやってくれる。多分。
結局これなんなの
Playって割とGlobalな値使ってるけど、それ良くないから依存性は後で注入することにしようぜ!そこでDIですよ!だからGlobalSettingsとかいうGlobalなobjectはやめようぜ!ってことらしい。DIを使うモチベはそんなとこ。
で、上は何をしているかというと、moduleを追加して、moduleを初期化するときにonStartを実行させるようなことをしてるだけ。簡単だね