Dagger没有初始化Lazy <t> lazy Variable?</t>

时间:2015-03-20 14:46:30

标签: java inject dagger dagger-2

我正在使用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?

1 个答案:

答案 0 :(得分:2)

使用Lazy类,如

@Inject Lazy<Message> message;

在您的代码中使用:

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

Here's the documentation for Lazy

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