1

I'm new to Dagger and I'm trying to implement a class that inherits from a class where injection is taking place. Things broke when I took out injection of one component in MainActivity and inherited it from BaseActivity.

My AppComponentClass:

@Singleton
@Component(modules = {NetworkModule.class, ApplicationModule.class, 
AndroidModule.class})
public interface AppComponent {

   void inject (BaseActivity baseActivity);
   void inject (MainActivity mainActivity);
}
}

My ActivityModule class:

@Module
public class ActivityModule {

private Activity activity;

public ActivityModule(Activity activity) {
    this.activity = activity;
}

@PerActivity
@Provides
@ActivityContext
public Context provideContext() {
    return activity;
}
}

my ApplicationModule class:

@Module
public class ApplicationModule {

private Application application;

public ApplicationModule(Application application) {
    this.application = application;
}

@Provides
@Singleton
@ApplicationContext
public Context provideContext() {
    return this.application;
}

@Provides
@Singleton
public FCMTokenHelper provideFCMTokenHelper(Context context, ApiService apiService) {
    UserRepoImpl userRepo = new UserRepoImpl(apiService);
    return new FCMTokenHelper(context, context.getClass().getSimpleName(), userRepo);
}

@Provides
@Singleton
public UserRepoContract providerUserRepo(ApiService apiService) {
    return new UserRepoImpl(apiService);
}

}

My two classes (both in kotlin)

class MainActivity : BaseActivity() { 

}

abstract class BaseActivity : AppCompatActivity(), GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ActivityCompat.OnRequestPermissionsResultCallback, LocationListener {

   @Inject
   lateinit var userRepo: UserRepoContract

   @Inject
   internal var tokenHelper: FCMTokenHelper? = null
}

The error(s):

Error:(51, 10) error: .BaseActivity cannot be provided without an @Provides-annotated method. BaseActivity is injected at AppComponent.inject(baseActivity) Error:(75, 10) error: MainActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method. MainActivity is injected at .AppComponent.inject(mainActivity)

Using Dagger 2 ver 2.9 Android Studio 3.0 both Kotlin and Java

Kristy Welsh
  • 7,828
  • 12
  • 64
  • 106

1 Answers1

1

My problem was here:

@Inject
internal var tokenHelper: FCMTokenHelper? = null

Changing it to:

@Inject
lateinit var tokenHelper: FCMTokenHelper

Fixed the problem. See a good explanation here.

Kristy Welsh
  • 7,828
  • 12
  • 64
  • 106