Android 匕首2:错误:[匕首/丢失绑定]无法解决此问题
我得到了一个Android 匕首2:错误:[匕首/丢失绑定]无法解决此问题,android,dependency-injection,dagger-2,Android,Dependency Injection,Dagger 2,我得到了一个[Dagger/MissingBinding]错误,我无法找出这个错误的原因 以下是完整的错误堆栈: 错误:[Dagger/MissingBinding]如果没有,则无法提供java.io.File @Inject构造函数或@Inject提供带注释的方法。java.io.xml文件 是在服务时注入的。keysterervice(keysterefile) service.keystepreservice在 di.Module.WalletRepositoryModule.getWal
[Dagger/MissingBinding]
错误,我无法找出这个错误的原因
以下是完整的错误堆栈:
错误:[Dagger/MissingBinding]如果没有,则无法提供java.io.File
@Inject构造函数或@Inject提供带注释的方法。java.io.xml文件
是在服务时注入的。keysterervice(keysterefile)
service.keystepreservice在
di.Module.WalletRepositoryModule.getWalletRepository(…,
keyStoreService)repository.WalletRepository接口提供于
di.component.ApplicationComponent.getWalletRepository()
以下
其他入口点也取决于此:
dagger.android.AndroidInjector.Injection(T)
[di.component.ApplicationComponent?
di.Module.BindModule_BindStartModule.StartActivitySubcomponent]
dagger.android.AndroidInjector.Injection(T)
[di.component.ApplicationComponent?
di.Module.BindModule_BindAddWalletActivity.AddWalletActivity子组件]
密钥保留级别:
public class KeyStoreService implements KeyStoreServiceInterface {
private final KeyStore keyStore;
@Inject
public KeyStoreService(File keyStoreFile) {
keyStore = new KeyStore(keyStoreFile.getAbsolutePath(), Geth.LightScryptN, Geth.LightScryptP);
}
}
WalletRepositoryModule类:
@Module
public class WalletRepositoryModule {
@Provides
@ApplicationScope
WalletRepositoryInterface getWalletRepository(SharedPreferencesHelper sharedPreferencesHelper, KeyStoreService keyStoreService){
return new WalletRepository(sharedPreferencesHelper, keyStoreService);
}
}
ApplicationComponent类:
@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();
}
所有其他模块都在工作。只有在添加WalletRepositoryModule后,我才出现此错误。有什么建议吗?你必须告诉Dagger如何解析
文件。我建议您使用@提供
@命名的
注释方法。乙二醇
@Provides
@Named("KEY_STORE_FILE")
public File provideKeyStoreFile() {
return new File(path/to/keystore)
}
改变
@Inject
public KeyStoreService(File keyStoreFile) {
在
谢谢我工作过。如果你有时间的话,只是一些快速跟进的问题。为什么在添加WalletrepositoryModule之后而不是之前发生此错误?它不需要提前“@命名”,也不会抛出任何错误。我可以使用限定符而不是“@Named”吗?我可以代替模块中的命名/限定符吗?这样我就不必在keystreservice类中使用“@Named/@Qualifier”?因为WalletRepositoryInterface
将keystreservice
作为依赖项。您可以使用带注释的@Provides
方法返回密钥保留
依赖项。在该方法中,您必须手动调用新keystreservice
再次感谢!
@Inject
public KeyStoreService(@Named("KEY_STORE_FILE") File keyStoreFile) {