Error: Cannot find symbolic variable DaggerAppComponent
While trying to integrate the latest version of Dagger 2, I ran into a dagger generation issue. Dagger does not automatically generate DaggerAppComponent, despite multiple Rebuilds and Make Module App processes.
Application class:
public class BaseApplication extends Application
{
private AppComponent appComponent;
@Override
public void onCreate()
{
super.onCreate();
initAppComponent();
}
private void initAppComponent()
{
DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public AppComponent getAppComponent()
{
return appComponent;
}
}
AppComponent
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
void inject(BaseApplication application);
}
AppModule:
@Module
public class AppModule
{
private BaseApplication application;
public AppModule(BaseApplication app)
{
application = app;
}
@Provides
@Singleton
Context provideContext()
{
return application;
}
@Provides
Application provideApplication()
{
return application;
}
}
Used dependency:
compile 'com.google.dagger:dagger-android:2.11'
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
Any help in this regard would be much appreciated.
source to share
It looks like I was using the wrong dependencies:
compile 'com.google.dagger:dagger-android:2.x'
compile 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
The above dependencies should be used if you are using classes in .android dagger.
Correct dependencies:
compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
source to share
I had the same problem ... What solved my problem was adding the ViewModel to the ViewmodelModulle and then adding the @Inject annotation to the constructor of my ViewModel. This might be a different problem for you, but it really helped in my situation. My code compiled with no problem
@Inject <----- This was missing in the constructor.
public MessageViewModel(Application application) {
super(application);
mApp = application;
source to share
Enter the Chengue code,
private void initAppComponent()
{
/* DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();*/
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
appComponent .inject(this)
}
Other things
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
void inject(BaseApplication application);
}
Why you need to inject the same class in which the component is created, you can easily get the context and application in the Application class. The dagger can help you find the dependent class.
source to share