2012-03-15 5 views
0

일상적인 프로그래밍 작업에 Google Guice를 사용하기 시작했습니다. 오브젝트 그래프를 초기화하기 위해 Injector에 기존 오브젝트를 전달해야하므로 메소드 Injector#injectMembers(instance)을 사용합니다. 하지만 그것이 작동하는지 확실하지 않아 단위 테스트를 작성했지만 예상대로 작동하지 않았습니다. 내가 뭐 놓친 거 없니? 나는 Guice 3Google 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 A 없음 - Guice는 종속성 개체를 만들어 주입 사용합니다. 당신이하고 싶은 것 나는 당신의 모듈에 bind(Login.class).toInstance(login);라고 생각합니다.

+0

이 시점에서 혼란 스러웠습니다. 당신의 대답에 감사드립니다. @Provides 주석을 사용하여이 문제를 해결할 수도 있음을 알았습니다. –

관련 문제