Я использую несколько пользовательских ViewModelProviderFactory для моего другого класса ViewModel. И предоставление зависимости с помощью кинжала. Вот мой класс модуля в Java:
@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)
А вот мой класс Module после преобразования в класс kotlin:
@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)
}
}