2012-03-15 12 views
0

私は毎日のプログラミング作業にGoogle Guiceを使い始めています。オブジェクトグラフを初期化するために既存のオブジェクトをInjectorに渡す必要があったので、メソッドInjector#injectMembers(instance)を使用しています。しかし、私は単体テストを書いたので、それが動作するかどうかはわかりませんでしたが、期待通りに動作しませんでした。私は何か見落としてますか?私は、Guiceのは3方法Google GuiceのInjectMembers()は実際には機能しませんか?

public class Login_Should { 
    @Test 
    public void testName() throws Exception { 
     Login login = new Login(); 

     Injector injector = Guice.createInjector(new LoginModule()); 
     injector.injectMembers(login); 

     LoginWrapper caller = injector.getInstance(LoginWrapper.class); 
     assertEquals(login.getName(), caller.getName()); 
    } 
} 

public class Login { 

    private int random; 

    public Login() { 
     this.random = new Random().nextInt(); 
    } 

    public String getName() { 
     return "Mr. A" + random; 
    } 
} 

public class LoginWrapper { 
    private Login login; 

    @Inject 
    public LoginWrapper(Login login) { 
     this.login = login; 
    } 

    public String getName() { 
     return login.getName(); 
    } 
} 

public class LoginModule extends AbstractModule{ 

    @Override 
    protected void configure() { 
     bind(LoginWrapper.class); 
    } 

} 

答えて

1

injectMembersなし-Guiceのは、その依存関係を持つオブジェクトを作成した注入使います。あなたがしたいこと私はあなたのモジュールにbind(Login.class).toInstance(login);があると思います。

+0

この時点で私は混乱しました。あなたの答えをありがとう。 @Providesアノテーションを使用することでこの問題も解決できることがわかりました。 –

関連する問題