Skip to content

Instantly share code, notes, and snippets.

View fabioCollini's full-sized avatar

Fabio Collini fabioCollini

View GitHub Profile
class MainActivity : AppCompatActivity() {
@Inject
lateinit var viewModelProvider: Provider<MyViewModel>
private val viewModel by viewModels { viewModelProvider }
override fun onCreate(savedInstanceState: Bundle?) {
(application as MyApp).component.inject(this)
super.onCreate(savedInstanceState)
inline fun <reified VM : ViewModel> AppCompatActivity.viewModels(
crossinline producer: () -> Provider<VM>
): Lazy<VM> =
viewModels {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(c: Class<T>) =
producer().get() as T
}
}
class MainActivity : AppCompatActivity() {
@Inject
lateinit var dependency: Dependency
override fun onCreate(savedInstanceState: Bundle?) {
(application as MyApp).component.inject(this)
super.onCreate(savedInstanceState)
//...
}
@Module
object MyModule {
@Singleton
@Provides
fun provideCache(
databaseCache: Provider<DatabaseCache>,
inMemoryCache: Provider<InMemoryCache>
): Cache {
return if (useInMemoryCache())
inMemoryCache.get()
@Module
object MyModule {
@Singleton
@Provides
fun provideCache(
databaseCache: DatabaseCache,
inMemoryCache: InMemoryCache
): Cache {
return if (useInMemoryCache())
inMemoryCache
@Module
interface MyModule {
@Binds
fun bindsCache(impl: DatabaseCache): Cache
companion object {
@Provides
fun provideApi(): Api {
return createApiImplementationUsingRetrofit()
}
@Module
object MyApiModule {
@Singleton
@Provides
fun provideApi(): Api {
return createApiImplementationUsingRetrofit()
}
}
@Module
interface MyModule {
@Binds
fun bindsCache(impl: DatabaseCache): Cache
}
@Module
object MyModule {
@Provides
fun provideCache(impl: DatabaseCache): Cache = impl
}
class DatabaseCache @Inject constructor(
private val database: Database
) : Cache {
override fun load(): String? = database.executeQuery()
}