Dagger 没有初始化 Lazy<T> 惰性变量?

Dagger does not initialize Lazy<T> lazy Variable?

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

private final Message message;

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

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

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

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

编辑:

我尝试按如下方式使用 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?

使用 Lazy class 赞

@Inject Lazy<Message> message;

在您的代码中使用:

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

Here's the documentation for Lazy

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