【发布时间】:2019-06-16 13:59:32
【问题描述】:
我正在尝试创建一个像 example 这样的视图模型模块,但我遇到了这个错误
错误:java.util.Map,javax.inject.Provider> 不能在没有 @Provides 注释的方法的情况下提供。
我按照所有示例进行操作,这是我的代码
ViewModelFactory 类
@Singleton
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> mCreators;
@Inject
ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
mCreators = creators;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
Provider<? extends ViewModel> creator = mCreators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : mCreators
.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if (creator == null) {
throw new IllegalArgumentException("unknown model class " + modelClass);
}
try {
return (T) creator.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
ViewModelModule 类
@Module
public abstract class ViewModelModule {
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory factory);
}
这是组件
@Singleton
@Component(modules = {AppModule.class, ViewModelModule.class})
public interface MainComponent {
void inject(Sdk sdk);
void injectTestActivity(TestActivity testActivity);
}
ps:这个实现在android库中,不在应用项目中
【问题讨论】:
-
嗨。这真的很奇怪。你能发布关于视图模型的依赖注入代码吗?
-
我没有在我的视图模型中进行任何注入
-
您是否有任何从 Dagger 注入并标记为
@MapKey(BlahViewModel.class)并随后以@Binds暴露为ViewModel的 ViewModel? -
我没有注入任何视图模型,我提供了我自己的@ViewModelKey 注释
标签: java android dependency-injection viewmodel dagger-2