如何将已存在的对象注入Dagger 2中的对象图?

时间:2017-06-01 17:20:39

标签: java dagger-2

我正在编写一个Web应用程序,其框架调用run()类的Application方法,并传入Environment类型的对象。

我写的其他对象取决于此Environment课程,因为他们需要调用其register()metrics()方法。

问题是我在应用程序的main()函数中创建了对象图,如下所示:

public class MainApplication extends Application<MainConfiguration> {

private final ConnectionPool sharedPool;

public static void main(String[] args) throws Exception {
MainApplication mainApplication = DaggerMainApplicationComponent.create()
    .createApplication();

mainApplication.run(args);
}

@Inject public MainApplication(ConnectionPool connectionPool) {
super();
sharedPool = connectionPool;
}

@Override
public void run(MainConfiguration configuration, Environment environment) throws Exception {
    // Here is where I have access to the environment variable
}

因此,当Dagger构建MainApplication时,environment变量尚未就绪。只有在调用run()时才可以使用它。

有没有办法在此时将此变量注入对象图?

1 个答案:

答案 0 :(得分:1)

这类问题已经有了一些牵引力here但是为了回答您的具体案例并详细说明EpicPandaForce的评论,您可以通过创建持有人轻松逃避一个小的依赖周期类:

class EnvironmentHolder {

    private Environment environment;

    @Nullable
    Environment get() {
        return environment;
    }

    void set(Environment environment) {
        this.environment = environment;
    }
}

而使Environment的{​​{1}}依赖项的前依赖项改为:

EnvironmentHolder

如果您发现自己经常使用它,则可能表示您需要自定义范围。