The My Dagger2 Component class contains 3 modules that I am trying to use to enter field dependencies into the Android activity class. There are comments in the generated Component file saying that all modules are not used, linking this page for more information.
My Activity class calls the Component injection (Activity) method and has fields annotated for injection that are provided by the modules, so I'm not sure why there aren't any Providers for this injection in the generated Component file.
My code is below, thanks for the help!
Component class generated:
public final class DaggerMainComponent implements MainComponent { private DaggerMainComponent(Builder builder) { assert builder != null; } public static Builder builder() { return new Builder(); } public static MainComponent create() { return builder().build(); } @Override public void inject(Activity activity) { MembersInjectors.<Activity>noOp().injectMembers(activity); } public static final class Builder { private Builder() {} public MainComponent build() { return new DaggerMainComponent(this); } @Deprecated public Builder daoModule(DaoModule daoModule) { Preconditions.checkNotNull(daoModule); return this; } @Deprecated public Builder repositoryModule(RepositoryModule repositoryModule) { Preconditions.checkNotNull(repositoryModule); return this; } @Deprecated public Builder portableModule(PortableModule portableModule) { Preconditions.checkNotNull(portableModule); return this; } } }
Class of non-generated components :
@Component(modules={DaoModule.class,RepositoryModule.class,PortableModule.class}) public interface MainComponent { void inject(Activity activity); }
Module classes : Is there a problem that one module provides an object of dependency on another object provided by another module belonging to the same component?
@Module public class DaoModule { private DatabaseHelper databaseHelper; public DaoModule(DatabaseHelper databaseHelper){ this.databaseHelper = databaseHelper; } @Provides public Dao<Player,Integer> providePlayerDao(){ return databaseHelper.getPlayerDao(); } @Provides public Dao<GamePlayed,Integer> provideGamePlayedDao() { try { return databaseHelper.getDao(GamePlayed.class); } catch (SQLException e) { return null; } } @Provides public Dao<GamePlayer,Integer> provideGamePlayerDao() { try { return databaseHelper.getDao(GamePlayer.class); } catch (SQLException e) { return null; } } } ... @Module public class RepositoryModule { @Provides public IGameResultRepository provideGameResultRepository( Dao<Player,Integer> playerDao, Dao<GamePlayed,Integer> gameDao, Dao<GamePlayer, Integer> gamePlayerDao) { return new OrmliteGameResultRepository(playerDao,gameDao,gamePlayerDao); } } @Module public class PortableModule { @Provides public GameResultListener provideGameResultListener(IGameResultRepository gameResultRepository){ return new GameResultListener(gameResultRepository); } }
Application Class:
public class AppStart extends Application { private MainComponent mainComponent; @Override public void onCreate() { super.onCreate(); DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext()); mainComponent = DaggerMainComponent.builder() .daoModule(new DaoModule(databaseHelper)) .build(); } public MainComponent getMainComponent(){ return mainComponent; } }
Action class:
public class MyActivity extends Activity { @Inject GameResultListener gameResultListener; @Inject Dao<Player,Integer> dao; @Inject IGameResultRepository repository; @Override protected void onCreate(Bundle state) { super.onCreate(state); ((AppStart)this.getApplication()).getMainComponent().inject(this);