The ViewModel
class WeatherViewModel @Inject constructor(
private val currentInteractor: CurrentWeatherInteractor,
// ...
): ViewModel() {}
GenericViewModelFactory
package app.ericn.daggerplain | |
import dagger.Component | |
import dagger.Module | |
import dagger.Subcomponent | |
import javax.inject.Inject | |
import javax.inject.Singleton | |
typealias AppScope = Singleton | |
/** | |
* For automatic service discovery or provision outside of [DependencyHolder]/ Module |
@Inject | |
lateinit var viewModelFactory: GenericViewModelFactory<WeatherViewModel> | |
private val viewModel: WeatherViewModel by lazy { | |
ViewModelProvider(this, viewModelFactory).get(WeatherViewModel::class.java) | |
} |
The ViewModel
class WeatherViewModel @Inject constructor(
private val currentInteractor: CurrentWeatherInteractor,
// ...
): ViewModel() {}
GenericViewModelFactory
val mappingReader = File("/Users/ericn/tmp/algo/kotlin/src/matching_logs/mapping.txt").bufferedReader()
val mappingTree = BinarySearchTree("com.myawesomeapp.ghafaewafe") // hopefully the tree will be balance
mappingReader.lines().forEach {
if (it.startsWith("com.myawesomeapp") && !it.contains("$") && !it.contains("_")) {
val arrowIndex = it.indexOf("->")
mappingTree.insert(it.substring(0, arrowIndex - 1))
}
}
@Module | |
class SomeFeatureViewModule() { | |
@Provides | |
@SomeFeatureViewScope | |
fun clickSubject() = PublishSubject.create<Unit>() | |
@Provides | |
@SomeFeatureViewScope | |
fun clickReadStream(clickSubject: PublishSubject<Unit>): Observable<Unit> = subject.throttleFirst(500L, TimeUnit.MILLISECONDS) |
@Module | |
class SomeFeatureViewModule() { | |
@Provides | |
fun clickSubject() = PublishSubject.create<Unit>() | |
@Provides | |
fun clickReadStream(clickSubject: PublishSubject<Unit>): Observable<Unit> = subject.throttleFirst(500L, TimeUnit.MILLISECONDS) | |
@Provides | |
fun viewModelFactory() = SomeViewModelFactory(clickReadStream: Observable<Unit>) |
DaggerMyAppComponent
package app.ericn.daggerplain;
import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;
DaggerMyAppComponent
package app.ericn.daggerplain;
import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;
DaggerMyAppComponent
package app.ericn.daggerplain;
import android.content.Context;
import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;
private final class MainActivityComponentImpl implements MainActivityComponent { | |
private final MainActivityComponent.MainActivityModule mainActivityModule; | |
private MainActivityComponentImpl( | |
MainActivityComponent.MainActivityModule mainActivityModuleParam) { | |
this.mainActivityModule = mainActivityModuleParam; | |
} | |
private MainPresenter getMainPresenter() { | |
return MainActivityComponent_MainActivityModule_PresenterFactory.presenter(mainActivityModule, app.ericn.daggerplain.DaggerMyAppComponent.this.catRepositoryProvider.get());} |