2016-09-19 7 views
0

私はインジェクターを作成して作業することはできません。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; 
    } 
+0

を使用してみてくださいのコンストラクタ(またはあなたが注入道) 'StorageHelperImpl'をご提示ください:StorageHelperImplはコンストラクタ


。 –

+0

また、パッケージの問題である可能性はありますか?たとえば、2つの異なるパッケージに同じ名前の2つのクラスを作成しますか?ここでは 'StorageModule'と' StorageHelper'について考えています。すべての輸入品を確認してください。 –

+0

@OlivierGrégoire、no ...私はそれぞれの名前のクラスが1つしかありません。私は質問を更新する。 – bukashka101

答えて

2

Guice.createInjector(Modules.combine(HandlingModule.getInstance(), StorageModule.getInstance())); 
+0

はい!それは仕事です! – bukashka101

+0

@hunterこの場合、 'Modules.combine(...)'が動作する理由を説明できますか?私はちょうど焦っているし、私は理解していない! (bukashka101の助けにもなりました。) –

関連する問題