我正在使用Java和Dagger依赖注入框架。通常情况下,我必须初始化一个类,但后来使用,例如:
private final Message message;
public SomePresenter() {
message = DaggerComponent.getMessage();
}
public someFuncA() {
message.doSomething();
}
public someFuncB() {
message.doSomething();
}
我希望该消息在第一次被请求时被初始化,并且从那时起总是在该类中使用相同的消息实例。我怎么能这样做?
修改
我尝试使用Lazy,如下所示,但lazyMessage为undefined
:
public class StartPresenter {
@Inject
Lazy<Message> lazyMessage;
@Inject
public StartPresenter(ConfigObject config) {
}
}
这是我的dagger2配置:
@Component(modules = {ApplicationModule.class})
@Singleton
public interface ApplicationComponent {
Message getMessage();
}
@Module()
public class CoreModule {
@Provides @Singleton
Message provideMessage() {
return new MessageImpl();
}
}
如何让dagger实例化lazyMessage?
答案 0 :(得分:2)
使用Lazy类,如
@Inject Lazy<Message> message;
在您的代码中使用:
//Doing something with message
message.get().messageMethod();
Here's the documentation for Lazy
Dagger只会在调用get()时连接类。每次调用get()时它都会返回相同的实例。