0

我有一个具有字段的 LoginController:@Inject ILoginService loginservice。

Google Guice 的配置如下:

  1. 这会创建 ILoginService 的注入

    bind(ILoginService.class).to(LoginService.class);
    bind(LoginController.class).toInstance(new LoginController());
    
  2. 这不会创建 ILoginService 的注入

    bind(ILoginService.class).to(LoginService.class);
    bind(LoginController.class);
    
  3. 这不会创建 ILoginService 的注入

    bind(ILoginService.class).to(LoginService.class);
    bind(LoginController.class).toProvider(new Provider<LoginController>() {
    
        public LoginController get() {
            return new LoginController();
        }
    });
    
  4. 不起作用... ILoginService 未注入

    @Provides
    public ILoginService loginService() {
        System.out.println("loginService");
        return new LoginService();
    }
    
    @Provides
    public LoginController loginController() {
        System.out.println("loginService controller");
        return new LoginController();
    }
    

使用以下方法调用注入器:injector.getInstance(LoginController.class);

4

1 回答 1

1

我将假设 1 和 2 是错误的方式。

如果您new LoginController()在 Guice 模块(或代码中的其他任何地方)中有,那么 Guice 不知道注入它,除非您通过调用Injector.injectMembersAbstractModule.requestInjection告诉 Guice 这样做。

现在你为什么要调用new你的代码?你想要什么?如果仅LoginController存在一个实例,则使用 Singleton 范围。

于 2012-08-14T15:22:01.857 回答