Google()의 예를 따르려고했습니다. 그리고 그것은 다른 ViewModel 타입에 바인딩 할 수있는 것을 보았습니다.Dagger2를 사용하여 다중 ViewModelFactory로지도에 바인딩하는 방법
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel bindUserViewModel(UserViewModel userViewModel);
@Binds
@IntoMap
@ViewModelKey(SearchViewModel.class)
abstract ViewModel bindSearchViewModel(SearchViewModel searchViewModel);
@Binds
@IntoMap
@ViewModelKey(RepoViewModel.class)
abstract ViewModel bindRepoViewModel(RepoViewModel repoViewModel);
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(GithubViewModelFactory factory);
}
내가 원하는 것은 다중 ViewModelProvider.Factory를 일반 바인딩으로 바인딩하는 것입니다.
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelFactoryKey(FeedEntryListViewModelFactory.class)
abstract ViewModelProvider.Factory bindViewModelFactory(FeedEntryListViewModelFactory factory);
}
는 ViewModelFactoryKey.java
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
@interface ViewModelFactoryKey {
Class<? extends ViewModelProvider.Factory > value();
}
FeedActivity.java는
public class FeedActivity extends DaggerAppCompatActivity {
@Inject
ViewModelProvider.Factory viewModelFactory;
FeedEntryListViewModel viewModel;
@SuppressLint("StaticFieldLeak")
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
}
그러나, 다음과 같은 오류가 발생합니다.
Error:(21, 8) error: [dagger.android.AndroidInjector.inject(T)] android.arch.lifecycle.ViewModelProvider.Factory cannot be provided without an @Provides- or @Produces-annotated method.
android.arch.lifecycle.ViewModelProvider.Factory is injected at
com.cn29.aac.ui.feedentry.FeedActivity.viewModelFactory
com.cn29.aac.ui.feedentry.FeedActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
저는 Dagger2를 처음 사용합니다. 제대로 사용하지 않으면 언제든지 의견을 말하십시오. 고맙습니다. 이에
@Inject
ViewModelProvider.Factory viewModelFactory;
:
'내가하고 싶은이 일반 one'에 멀티 ViewModelProvider.Factory을 결합하는 것입니다 - 이것은 무엇을 의미합니까? 당신은 다양한 공장을 가지고 있으며, 당신은 그것들을지도에 넣고 싶습니까? – azizbekian
예, 원합니다. 실제로 저는 다중 클래스 FeedListViewModelFactory, FeedDetailViewModelFactory를가집니다. 그러나이 액티비티에서는 주입 된 타입이 ViewModelProvider.Factory입니다. 따라서 ViewModelProvider.Factory에 매핑해야합니다. –