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

Tri*_*kke 2 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 );
}
Run Code Online (Sandbox Code Playgroud)

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

Jak*_*ton 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;
}
Run Code Online (Sandbox Code Playgroud)