[英]Dagger 2: error: [Dagger/MissingBinding] cannot solve this one
I get a [Dagger/MissingBinding]
error and I can not figure out why on this error.我收到一个[Dagger/MissingBinding]
错误,我不知道为什么会出现这个错误。
Here is the full error stack:这是完整的错误堆栈:
error: [Dagger/MissingBinding] java.io.File cannot be provided without an @Inject constructor or an @Provides-annotated method.错误:[Dagger/MissingBinding] java.io.File 不能在没有 @Inject 构造函数或 @Provides-annotated 方法的情况下提供。 java.io.File is injected at service.KeyStoreService(keyStoreFile) service.KeyStoreService is injected at di.Module.WalletRepositoryModule.getWalletRepository(…, keyStoreService) repository.WalletRepositoryInterface is provided at di.component.ApplicationComponent.getWalletRepository() java.io.File 注入 service.KeyStoreService(keyStoreFile) service.KeyStoreService 注入 di.Module.WalletRepositoryModule.getWalletRepository(..., keyStoreService) repository.WalletRepositoryInterface 提供在 di.component.ApplicationComponent.getWalletRepository()
The following other entry points also depend on it: dagger.android.AndroidInjector.inject(T) [di.component.ApplicationComponent ?以下其他入口点也依赖于它: dagger.android.AndroidInjector.inject(T) [di.component.ApplicationComponent ? di.Module.BindModule_BindStartModule.StartActivitySubcomponent] dagger.android.AndroidInjector.inject(T) [di.component.ApplicationComponent ? di.Module.BindModule_BindStartModule.StartActivitySubcomponent] dagger.android.AndroidInjector.inject(T) [di.component.ApplicationComponent ? di.Module.BindModule_BindAddWalletActivity.AddWalletActivitySubcomponent] di.Module.BindModule_BindAddWalletActivity.AddWalletActivitySubcomponent]
KeyStoreService class: KeyStoreService 类:
public class KeyStoreService implements KeyStoreServiceInterface {
private final KeyStore keyStore;
@Inject
public KeyStoreService(File keyStoreFile) {
keyStore = new KeyStore(keyStoreFile.getAbsolutePath(), Geth.LightScryptN, Geth.LightScryptP);
}
}
WalletRepositoryModule class: WalletRepositoryModule 类:
@Module
public class WalletRepositoryModule {
@Provides
@ApplicationScope
WalletRepositoryInterface getWalletRepository(SharedPreferencesHelper sharedPreferencesHelper, KeyStoreService keyStoreService){
return new WalletRepository(sharedPreferencesHelper, keyStoreService);
}
}
ApplicationComponent class:应用组件类:
@ApplicationScope
@Component(modules = {ApplicationContextModule.class,
SharedPreferencesModule.class,
KeyStoreModule.class,
SharedPreferenceHelperModule.class,
AndroidInjectionModule.class,
AndroidsupportInjectionModule.class,
WalletRepositoryModule.class})
public interface ApplicationComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(MyApplication myApplication);
ApplicationComponent build();
}
void inject(MyApplication myApplication);
@ApplicationContext
Context getApplicationContext();
SharedPreferences getSharedPreferences();
KeyStoreServiceInterface getKeyStoreService();
SharedPreferencesHelper getSharedPreferencesHelper();
WalletRepositoryInterface getWalletRepository();
}
All the other modules are/was working.所有其他模块都在/正在工作。 It's only after adding WalletRepositoryModule I got this error.只有在添加 WalletRepositoryModule 之后,我才收到此错误。 Any suggestions?有什么建议?
you have to tell Dagger how to resolve File
.你必须告诉 Dagger 如何解析File
。 I would suggest you a @Provides
@Named
annotated method.我建议你使用@Provides
@Named
注释方法。 EG例如
@Provides
@Named("KEY_STORE_FILE")
public File provideKeyStoreFile() {
return new File(path/to/keystore)
}
and change和改变
@Inject
public KeyStoreService(File keyStoreFile) {
in在
@Inject
public KeyStoreService(@Named("KEY_STORE_FILE") File keyStoreFile) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.