Dagger 2 doesn't initialize a variable

Viewed 1103

Now i'm trying to implement dagger in my project, and I have a one problem. Variable that initializes in application component doesn't initialized in my activity. Here is my code. Application:

public class MyApplication extends Application {
    private ApplicationComponent applicationComponent;
    @Inject
    public Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        applicationComponent = DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build();
        applicationComponent.inject(this);
    }

    public ApplicationComponent getApplicationComponent() {
        return applicationComponent;
    }
}

Here variable context != null

Activity:

public class MainActivity extends AppCompatActivity {
    private ActivityComponent activityComponent;
    @Inject
    Context context;

    @Override
    protected void onStart() {
        super.onStart();
        activityComponent = DaggerActivityComponent.builder()
                .activityModule(new ActivityModule(this))
                .applicationComponent(((MyApplication) getApplication()).getApplicationComponent())
                .build();
        activityComponent.inject(this);
    }
}

Here context == null.

Dagger:

@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
    void inject(MyApplication application);
    Context getApplicationContext();
}

@Component(modules = {ActivityModule.class}, dependencies = {ApplicationComponent.class})
public interface ActivityComponent {
    void inject(MainActivity mainActivity);
}

@Module
public class ApplicationModule {
    private Application application;

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

    @Provides
    Context provideApplicationContext() {
        return application.getApplicationContext();
    }
}

@Module
public class ActivityModule {
    Activity activity;

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

So, dagger provide "Context" only in application class, but does not provide it in MainActivity class. What i'm do wrong? May be I have to change something.

Thanks!

2 Answers
Related