我注意到你正在使用Java。以下是我如何將它注入控制器的工作。
首先,我創建了以下4類:
myController的:
package controllers;
import play.mvc.*;
import javax.inject.Inject;
public class MyController extends Controller {
@Inject
private MyInterface myInterface;
public Result someActionMethodThatUsesMyInterface(){
return ok(myInterface.foo());
}
}
MyInterface的:
package models;
public interface MyInterface {
String foo();
}
MyImplementation2Inject:
package models;
public class MyImplementation2Inject implements MyInterface {
public String foo() {
return "Hi mom!";
}
}
MyComponentM模塊:
package modules;
import com.google.inject.AbstractModule;
import models.MyInterface;
import models.MyImplementation2Inject;
public class ComponentModule extends AbstractModule {
@Override
protected void configure() {
bind(MyInterface.class).
to(MyImplementation2Inject.class);
}
}
現在最後一部分,我花了很長時間才弄清楚,是註冊模塊。您可以通過添加以下行至application.conf
文件,該文件位於conf
目錄的結尾這樣做:
play.modules.enabled += "modules.MyComponentModule"
我希望這是對您有所幫助。:)
不,這是錯誤的。像這樣的循環依賴是一個糟糕的設計。服務可以有DAO並與其他服務協作,但DAO不應該有服務。 – duffymo 2013-03-24 15:19:37
正確,這是有道理的。 – unleashed 2013-03-24 15:37:19
爲什麼你會同時使用Play和Guice?不玩有一種內置的DI的形式? – duffymo 2013-03-24 15:52:48