Search code examples
javadependency-injectionguicegwt-gin

Field level injection with Gin


I'm trying to do field-level injection so I don't have to pass "models" when my controllers are instantiated, like,

UserController controller = new UserController(/*No need to pass models here*/);

However my application throws NullPointerException, here my code:

UserController.java

    public class UserController implements Controller {
        @Inject private UserModel model;
        public UserController() {
          model.doSomething(); // NullPointerException
        }
    }

ClientGinModule.java

public class ClientGinModule extends AbstractGinModule {
    @Override
    protected void configure() {
        bind(UserModel.class).in(Singleton.class);
    }
}

What could be the problem?


Solution

  • Use In Guice

    UserController controller = injector.getInstance(UserController.class);
    

    Use in Gin:

    // Declare a method returning a UserController on your interface extending Ginjector
    public UserController getUserController();
    
    // When you need the controller, just call:
    injector.getUserController();
    

    to get a fully-injected controller.