2016-09-05 28 views
0

我可以更改存储在Application module中的值并将其返回到新的活动或其他位置吗?我试过这个代码,我预计@Provides批注的方法将要求每因为我叫DaggerExampleBuilder.builde().appComponent(...).build().inject()我是否可以更新ApplicationModule并获得每次注入的更新值

这是从我的ApplicationModule代码时间:

@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()调用一次

回答

1

注解getCurrentProperty(Realm)使用@Singleton表示Dagger将记忆该方法的结果并将其用于该组件的其余生命周期。见http://google.github.io/dagger/users-guide.html#singletons-and-scoped-bindings

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

+0

+1。在这种情况下,如果你想单身人士的行为,你需要重定向@Singleton绑定(可能与@Qualifier)或使用[一些其他技术来确保单身人士行为](https://google.github.io /guava/releases/19.0/api/docs/com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier))。 –

相关问题