Метод InjectMembers () из Google Guice действительно не работает? - PullRequest
0 голосов
/ 15 марта 2012

Я начинаю использовать Google Guice для своих ежедневных задач по программированию.Мне нужно было передать существующий объект Injector для инициализации графа объекта, поэтому я использую метод Injector # injectMembers (instance) , чтобы сделать это.Но я не был уверен, работает ли он, поэтому я написал модульный тест, но он не сработал, как я ожидал.Я что-то пропустил?Я использую Guice 3

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 Ответ

1 голос
/ 15 марта 2012

injectMembers внедряет не-Guice созданный объект с его зависимостями. То, что вы хотите сделать, я думаю, bind(Login.class).toInstance(login); в вашем модуле.

...