我注意到你正在使用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