私はインジェクターを作成して作業することはできません。GoogleのGuiceの2つのモジュール
private static Injector mvpInjector = Guice.createInjector(
HandlingModule.getInstance(),
StorageModule.getInstance()
);
それから私は、クラスのインスタンスを取得しよう:
mvpInjector.getInstance(ImageCreatePresenter.class).showImageCreateWindow();
これは、注入する必要があるクラスのコンストラクタ、次のとおりです。
@Inject
public ImageCreatePresenterImpl(ImageCreateView imageCreateView, StorageHelper storageHelper, ImageCreater imageCreater) {
this.imageCreateView = imageCreateView;
this.storageHelper = storageHelper;
this.imageCreater = imageCreater;
}
しかし、注入、スロー例外中:
のException in thread "main" com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for com.dugin.rostislav.StorageHelper was bound.
while locating com.dugin.rostislav.StorageHelper
for parameter 1 at com.dugin.rostislav.presenter.ImageCreatePresenterImpl.<init>(ImageCreatePresenterImpl.java:26)
at com.dugin.rostislav.modules.HandlingModule.configure(HandlingModule.java:32)
マイモジュール:
1.
public class HandlingModule extends AbstractModule {
private static final HandlingModule module = new HandlingModule();
private HandlingModule() {
//Closed constructor
}
public static HandlingModule getInstance() {
return module;
}
@Override
protected void configure() {
bind(MainWindowPresenter.class).to(MainWindowPresenterImpl.class).in(Singleton.class);
bind(ImageCreatePresenter.class).to(ImageCreatePresenterImpl.class).in(Singleton.class);
bind(ImageCreater.class).to(ImageCreaterImpl.class).in(Singleton.class);
bind(ImageCreateView.class).to(ImageCreateViewImpl.class).in(Singleton.class);
bind(MainView.class).to(MainViewImpl.class).in(Singleton.class);
}
}
2.
public final class StorageModule extends AbstractModule {
private final static StorageModule module = new StorageModule();
private TypeListener storageHelperListener = new TypeListener() {
@Override
public <I> void hear(final TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
typeEncounter.register(new InjectionListener<I>() {
@Override
public void afterInjection(Object o) {
if (o instanceof StorageHelper) {
try {
((StorageHelper) o).initDB();
} catch (DBInitializationException e) {
throw new RuntimeException(e);
}
}
}
});
}
};
private StorageModule() {
//Closed constructor
}
public static StorageModule getInstance() {
return module;
}
@Override
protected void configure() {
bind(ImageDB.class).to(SQLiteDB.class).in(Singleton.class);
bind(StorageHelper.class).to(StorageHelperImpl.class).in(Singleton.class);
bind(ImagesHelper.class).to(ImagesHelperImpl.class).in(Singleton.class);
bind(String.class)
.annotatedWith(Names.named(StorageModuleConst.DB_FOLDER_PATH))
.toProvider(Providers.of(StorageConst.OSLOADER_DATA_FOLDER));
bind(String.class)
.annotatedWith(Names.named(StorageModuleConst.IMAGES_FOLDER_PATH))
.toProvider(Providers.of(StorageConst.OSLOADER_IMAGES_FOLDER));
bindListener(Matchers.any(), storageHelperListener);
}
}
私のクラスが存在しません!
なぜ私はエラーを修正し、修正するのですか?
@Inject
public StorageHelperImpl(@NonNull ImageDB database, @NonNull ImagesHelper imagesHelper) {
this.database = database;
this.imagesHelper = imagesHelper;
}
を使用してみてくださいのコンストラクタ(またはあなたが注入道) 'StorageHelperImpl'をご提示ください:StorageHelperImplはコンストラクタ
。 –
また、パッケージの問題である可能性はありますか?たとえば、2つの異なるパッケージに同じ名前の2つのクラスを作成しますか?ここでは 'StorageModule'と' StorageHelper'について考えています。すべての輸入品を確認してください。 –
@OlivierGrégoire、no ...私はそれぞれの名前のクラスが1つしかありません。私は質問を更新する。 – bukashka101