Guice Beginner - How to bind concrete classes?

后端 未结 3 621
庸人自扰
庸人自扰 2021-02-01 13:13

I have this class:

public class House {
    private final Door door;
    private final Window window;
    private final Roof roof;

    @Inject
    public House(         


        
3条回答
  •  离开以前
    2021-02-01 13:57

    This is the way to go:

    protected void configure() {
        bind(Door.class);
        bind(Window.class);
        bind(Roof.class);
    }
    

    Since they are concrete classes, as Guice says, you can't bind them to themselves :-)

    Check out the Binder docs, it notes:

    bind(ServiceImpl.class);
    

    This statement does essentially nothing; it "binds the ServiceImpl class to itself" and does not change Guice's default behavior. You may still want to use this if you prefer your Module class to serve as an explicit manifest for the services it provides. Also, in rare cases, Guice may be unable to validate a binding at injector creation time unless it is given explicitly.

    Concrete classes with constructor marked as @Inject are automatically available for injection. But it helps the developer (you) know what is configured in the module.

提交回复
热议问题