Skip to content

Instantly share code, notes, and snippets.

View fabioCollini's full-sized avatar

Fabio Collini fabioCollini

View GitHub Profile
-@MyFeatureScope
-class CityRepoImpl @Inject constructor(val app: Application) : CityRepo {
+class CityRepoImpl(val app: Application) : CityRepo {
override suspend fun getCurrentCity(): String =
//...
}
@Module
-abstract class MyFeatureModule {
- @Binds
@Module
class CoreModule {
@Provides
@Singleton
fun providePrefs(app: Application): SharedPreferences =
PreferenceManager.getDefaultSharedPreferences(app)
}
@Singleton
@Component(modules = [CoreModule::class])
@MyFeatureScope
@Component(modules = [MyFeatureModule::class], dependencies = [CoreComponent::class])
interface MyFeatureComponent {
val prefs: SharedPreferences
val repo: CityRepo
}
interface CityRepo {
suspend fun getCurrentCity(): String
}
@MyFeatureScope
class CityRepoImpl @Inject constructor(val app: Application) : CityRepo {
override suspend fun getCurrentCity(): String =
//...
}
@Module
abstract class MyFeatureModule {
@Binds
abstract fun bindCityRepo(impl: CityRepoImpl): CityRepo
}
class MyViewModel @Inject constructor(
private val repo: CityRepo
) : ViewModel() {
//...
}
@MyActivityScope
@Component(dependencies = [MyFeatureComponent::class])
interface MyActivityComponent {
fun inject(activity: MyActivity)
}
class MyActivity : AppCompatActivity() {
@Inject
lateinit var viewModelProvider: Provider<MyViewModel>
class CityRepoImpl(val app: Application) : CityRepo {
override suspend fun getCurrentCity(): String =
//...
}
@Module
class MyFeatureModule {
@Provides
@MyFeatureScope
fun provideCityRepo(app: Application): CityRepo = CityRepoImpl(app)
}
class MyViewModel(
private val repo: CityRepo
) : ViewModel() {
//...
}