我有这个课:
public class House { private final Door door; private final Window window; private final Roof roof; @Inject public House(Door door, Window window, Roof roof) { this.door = door; this.window = window; this.roof = roof; } }
其中Door,Window和Roof是具体的类。现在,如果我想为这种情况实现一个模块,我会这样做:
Door
Window
Roof
public class HouseModule extends AbstractModule { @Override protected void configure() { bind(Door.class).to(Door.class); bind(Window.class).to(Window.class); bind(Roof.class).to(Roof.class); } }
但是我想知道这是否是绑定具体类的正确方法,还是有更简单的方法。我觉得有一个更简单的方法。
编辑
只是尝试了一下,它似乎不起作用:
1) Binding points to itself. at de.tarent.guice.ex._1.HouseModule.configure(HouseModule.java:10)
编辑2
似乎根本不需要绑定:
Injector injector = Guice.createInjector(); House house = injector.getInstance(House.class);
似乎也可以。
Guice的即时绑定正是您想要的。根据您的Door,Window并Roof满足以下要求(从Guice 文档中引用):
公共的,无参数的构造函数或带有@Inject批注的构造函数
一个空的Module实现就足够了:
public class HouseModule extends AbstractModule { @Override protected void configure() { } }