gpt4 book ai didi

java - > 不能在没有@Provides-annotated 方法的情况下提供

转载 作者:太空狗 更新时间:2023-10-29 14:36:36 25 4
gpt4 key购买 nike

我正在尝试创建一个像这样的 View 模型模块 example但是我有这个错误

error: java.util.Map,javax.inject.Provider> cannot be provided without an @Provides-annotated method.

我按照所有的例子,这是我的代码

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 绑定(bind)您的 View 模型 multibindings .换句话说,绑定(bind)您的 View 模型并使用 @IntoMap 多绑定(bind)注释对其进行注释。在您发布的同一示例中,您可以找到它的示例 here .在示例中,他们创建了 ViewModelKey 注释以指定 Dagger 可以从 map (通常是 View 模型的类)中检索 View 模型的键。 Dagger 将在编译时创建 map ,这就是您收到错误的原因 - 如果您没有指定任何 View 模型作为 map 的一部分,Dagger 就不知道它应该实例化哪些类型。

关于java - <android.arch.lifecycle.ViewModel>> 不能在没有@Provides-annotated 方法的情况下提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com