0

@InjectILoginServiceloginserviceというフィールドを持つLoginControllerがあります。

GoogleGuiceは次のように構成されています。

  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 が間違っていると仮定します。

Guice モジュール (またはコード内の他の場所) にある場合、 Injector.injectMembersまたはAbstractModule.requestInjectionnew LoginController()を呼び出して Guice にそうするように指示しない限り、Guice はそれに注入することを認識しません。

では、なぜnewコードを呼び出しているのでしょうか。何が欲しいの?のインスタンスが 1 つしかLoginController存在しない場合は、Singleton スコープを使用します。

于 2012-08-14T15:22:01.857 に答える