java - 我可以更新 ApplicationModule 并在每次注入(inject)时获取更新的值吗

标签 java android dependency-injection dagger-2

我可以更改存储在应用程序模块中的值并将其返回到新 Activity 或其他地方吗?我已经尝试过这段代码,我希望自从我调用 DaggerExampleBuilder.builde().appComponent(...).build().inject( 以来,每次都会调用 @Provides 带注释的方法)

这是我的应用程序模块中的代码:

 @Module
public class ApplicationModule {
    private HandsFreeApp app;
    private Property currentProperty;

public ApplicationModule(HandsFreeApp app) {
    this.app = app;
    Log.d("myTag", "ApplicationModule: "+hashCode());
}

@Provides @Singleton Context provideAppContext() {
    return app;
}

@Provides @Singleton RestClient provideRestClient(Realm realm) {
    TokenDataStore tokenDataStore = new TokenDataStore(realm);
    GetTokenUseCase tokenUseCase = new GetTokenUseCase(new TokenRepository(tokenDataStore));
    return new RestClientRetrofit(tokenUseCase);
}

@Provides @Singleton Realm provideRealm() {
    Realm.setDefaultConfiguration(new RealmConfiguration.Builder(app).build());
    return Realm.getDefaultInstance();
}

@Provides @Singleton Property getCurrentProperty(Realm realm) {

    if(currentProperty == null) {
        BookingStore store = new BookingLocalStore(realm);
        currentProperty = store.getPropertyList().toBlocking().first().get(0);
    }
    Log.d("myTag", "getCurrentProperty: "+currentProperty.getName());
    return currentProperty;
}

public void setCurrentProperty(Property currentProperty) {
    this.currentProperty = currentProperty;
    Log.d("myTag", "setCurrentProperty: "+this.currentProperty.getName());
}}

但是 getCurrentProperty() 仅调用一次

最佳答案

使用 @Singleton 注释 getCurrentProperty(Realm) 意味着 Dagger 将记住该 @Provides 方法的结果并将其用于其余部分该组件的使用生命周期。请参阅http://google.github.io/dagger/users-guide.html#singletons-and-scoped-bindings .

如果您希望每次请求 Property 时都调用该方法,请删除 @Singleton

关于java - 我可以更新 ApplicationModule 并在每次注入(inject)时获取更新的值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39327315/

相关文章:

java - 我无法将对象从一项 Activity 转移到另一项 Activity

Android Test Monkey - 设置详细程度?

java - JSP/Java/HTML | JSP out.println();在方法中打印到控制台

java - 防止 Java 代理在运行时附加

android - 使用 Theme.AppCompat.Light.NoActionBar 时如何更改标题颜色

angular - 为什么我们应该在 Angular 单元测试中使用 Jasmine Spy 对象?

ios - 在另一个定义中使用台风组装模型属性

dependency-injection - 将状态作为参数传递给环处理程序?

java - UML 关联 - 相当于 'role' 的代码是什么?

java - ViewFlipper的具体布局