2012-08-14 178 views
0

我有一個LoginController,它有一個字段:@Inject ILoginService loginservice。guice 3.0注入

谷歌吉斯配置是這樣的:

  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);

+1

你的問題是什麼?另外,我的直覺是你混合了#1和#2(我期望#2能夠工作,但不是#1)。 – 2012-08-14 14:15:22

回答

1

我要承擔1 & 2是走錯了路回合。

如果您吉斯模塊中有new LoginController()(或者在你的代碼別的地方),然後吉斯不知道,除非你告訴吉斯致電Injector.injectMembersAbstractModule.requestInjection這麼做注入進去。

現在你爲什麼要在你的代碼中調用new?你想要什麼?如果只存在LoginController的一個實例,則使用Singleton範圍。