サンプルもありますが使い方まで含めて。
まず、GlobalSettingsを継承したGlobalで以下のようにします。
Global.java
public class Global extends GlobalSettings {
/** アプリケーションで使うinjector **/
private Injector injectror;
@Override
public void onStart(Application app) {
super.onStart(app);
// injectorを作成する
injectror = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Hoge.class).toProvider(HogeImpl.class).in(Singleton.class);
}
});
}
@Override
public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
// 作成したinjectorをアプリケーションに登録
return injectror.getInstance(controllerClass);
}
}
こんな感じ。要は、Controllerで使うインスタンスを
guiceで作成したものにすればよいです。
そのためにgetControllerInstanceをオーバーライドします。
次に、「独自に作成したControllerのインスタンスを使う」という処理を書きます。
route.txt
# Home page
GET / @controllers.Application.index()
guiceの仕組みを適用したいControllerクラスの頭に「@」をつけてやります。
これで、対応するクラスでguiceによるDIなどが利用できるようになります。
Application.java
public class Application extends Controller {
@Inject
private Hoge hoge;
public Result index() {
return ok(hoge.operation());
}