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());} |