如何在具有2种不同实现的匕首模块中提供单例

时间:2015-01-19 15:13:35

标签: android dependency-injection dagger dagger-2

想象一下匕首module,它有以下两种方法来提供一个物体。

@Provides @Singleton Cache<Settings> providesSettingsCache( Database db )
{
    return new StateCache( db, BuildConfig.VERSION_CODE );
}

@Provides @Singleton Cache<User> providesUserCache( Database db )
{
    return new StateCache( db, BuildConfig.VERSION_CODE );
}

在我的示例中,StateCache实现了Cache<User>Cache<Settings>接口。现在,不是两个方法都返回StateCache的实例,我希望两种方法都明显指向同一个实例。 怎么能在Dagger得到这个? module是否拥有StateCache的一个实例的引用,并且两种方法都返回该实例?

1 个答案:

答案 0 :(得分:6)

让Dagger管理StateCache实例。

@Provides @Singleton StateCache provideStateCache(Database db) {
  return new StateCache(db, BuildConfig.VERSION_CODE);
}

@Provides @Singleton Cache<Settings> provideSettingsCache(StateCache cache) {
  return cache;
}

@Provides @Singleton Cache<User> provideSettingsCache(StateCache cache) {
  return cache;
}