使用Guice构造函数注入

Jor*_*lan 6 java dependency-injection guice

我有一些使用工厂的示例代码.我想通过删除工厂来清理代码并使用Guice代替.我试图这样做,但我遇到了一个小障碍.我对Guice很新,所以我希望有人可以帮助我.

现有客户端代码(使用工厂):

public class MailClient {

    public static void main(String[] args) {
        MailConfig config = MailConfigFactory.get();
        config.setHost("smtp.gmail.com");
        Mail mail = MailFactory.get(config);
        mail.send();
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用Guice进行重构:

//Replaces existing factories
public class MailModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(Mail.class)
        .to(MailImpl.class);

        bind(MailConfig.class)
        .to(MailConfigImpl.class);
    }
}

public class MailImpl implements Mail {

    private final MailConfig config;

    @Inject
    public MailImpl(MailConfig config) {
        this.config = config;
    }

    public void send() { ... }
}

public class MailClient {

    public static void main(String[] args) {
        MailModule mailModule = new MailModule();
        Injector injector = Guice.createInjector(mailModule);
        MailConfig config = injector.getInstance(MailConfig.class);
        config.setHost("smtp.gmail.com");
        Mail mail = //??
        mail.send();
     }
}
Run Code Online (Sandbox Code Playgroud)

如何构建在我修订的MailClient 中MailImpl使用该对象的实例config?我应该以这种方式使用Guice吗?

Jes*_*son 3

看看AssistedInject。它似乎解决了这个问题。