【发布时间】:2019-01-14 07:32:01
【问题描述】:
我正在为我的不同 ViewModel 类使用多个自定义 ViewModelProviderFactory。并使用匕首提供依赖。这是我在 java 中的 Module 类:
@Module
public class ConnectivityModule {
@Provides
ConnectivityViewModel provideConnectivityViewModel(Application application, DataManager dataManager, ServiceConnector serviceConnector, CompositeDisposable compositeDisposable) {
return new ConnectivityViewModel(application, dataManager, serviceConnector, compositeDisposable);
}
@Provides
ConnectivityViewModelProviderFactory provideConnectivityViewModelFactory(ConnectivityViewModel connectivityViewModel) {
return new ConnectivityViewModelProviderFactory<>(connectivityViewModel);
}
}
这是我的工厂课程:
public class ConnectivityViewModelProviderFactory<V> implements ViewModelProvider.Factory {
private V viewModel;
public ConnectivityViewModelProviderFactory(V viewModel) {
this.viewModel = viewModel;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
if (modelClass.isAssignableFrom(viewModel.getClass())) {
return (T) viewModel;
}
throw new IllegalArgumentException("Unknown class name");
}
}
它工作正常,但在将 java 代码转换为 kotlin 后,它不再工作并显示以下错误:
error: com.ui.factory.ConnectivityViewModelProviderFactory cannot be provided without an @Provides- or @Produces-annotated method.
public abstract interface AppComponent {
^
.ConnectivityViewModelProviderFactory is injected at
.ConnectingFragment.factory
.ConnectingFragment is injected at
.ConnectivitySubComponent.inject(connectingFragment)
这是我转换成 kotlin 类后的 Module 类:
@Module
class ConnectivityModule {
@Provides
internal fun provideConnectivityViewModel(application: Application, dataManager: DataManager, serviceConnector: ServiceConnector, compositeDisposable: CompositeDisposable): ConnectivityViewModel {
return ConnectivityViewModel(application, dataManager, serviceConnector, compositeDisposable)
}
@Provides
internal fun provideConnectivityViewModelFactory(connectivityViewModel: ConnectivityViewModel): ConnectivityViewModelProviderFactory<*> {
return ConnectivityViewModelProviderFactory(connectivityViewModel)
}
}
【问题讨论】:
标签: java android kotlin dagger-2 viewmodelproviders