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