我正在编写一个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()
时才可以使用它。
有没有办法在此时将此变量注入对象图?
答案 0 :(得分:1)
这类问题已经有了一些牵引力here但是为了回答您的具体案例并详细说明EpicPandaForce的评论,您可以通过创建持有人轻松逃避一个小的依赖周期类:
class EnvironmentHolder {
private Environment environment;
@Nullable
Environment get() {
return environment;
}
void set(Environment environment) {
this.environment = environment;
}
}
而使Environment
的{{1}}依赖项的前依赖项改为:
EnvironmentHolder
如果您发现自己经常使用它,则可能表示您需要自定义范围。