0

我正在使用 Java 和Dagger依赖注入框架。我经常遇到必须初始化一个类但稍后使用的情况,例如:

private final Message message;

public SomePresenter() {
  message = DaggerComponent.getMessage();
}

public someFuncA() {
  message.doSomething();
}

public someFuncB() {
  message.doSomething();
}

我希望该消息在第一次被请求时被初始化,并且从那一刻起始终在此类中使用相同的消息实例。我怎样才能做到这一点?

编辑:

我尝试按如下方式使用Lazyundefined但lazyMessage 是:

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?

4

1 回答 1

2

使用 Lazy 类

@Inject Lazy<Message> message;

在您的代码中使用:

//Doing something with message
message.get().messageMethod();

这是文档Lazy

Dagger 只会在调用 get() 时连接类。每次调用 get() 时都会返回相同的实例。

于 2015-03-20T14:50:39.243 回答