方法InjectMembers()的谷歌Guice并没有真正起作用?

时间:2012-03-15 07:18:49

标签: guice

我开始使用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 个答案:

答案 0 :(得分:1)

injectMembers注入一个非Guice创建的对象及其依赖项。您想要做的是我的模块中的bind(Login.class).toInstance(login);