0

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();
  }  
}

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 に答える