【问题标题】:Dagger2 - Module must be setDagger2 - Module must be set
【发布时间】:2022-12-19 02:41:59
【问题描述】:

I have Application component with two modules - applicationModule and activityModule. In my MvpApp.java class i create component with modules:

public class MvpApp extends Application {

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

My ApplicationModule has constructor with Application and i send it. But my `Activity module has constructor:

    public ActivityModule(AppCompatActivity activity) {
        this.mActivity = activity;
    }

And how can i send my MainActivity instance into this constructor? When i try

        mApplicationComponent = DaggerApplicationComponent.builder()
                .activityModule(new ActivityModule(new MainActivity()))
                .applicationModule(new ApplicationModule(this))
                .build();

I get an error.

【问题讨论】:

    标签: java dagger-2


    【解决方案1】:

    First of all, it is not recommended to provide context to the dagger graph via module constructor. You should use the @BindsInstance annotation in your dagger component builder.

    Also, you can not create a module with the constructor param of activity. You probably want to inject some object into your MainActivity. In this case, you need to create a method in your dagger component with a similar declaration and call it in your activity before calling

    ApplicationComponent

    public interface ApplicationComponent {
        // your previous code
    
        void inject(MainActivity target);
    }
    

    MainActivity

    @Inject SomeClass someClass; // <- some class you want to inject from graph
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ((MvpApp) getApplicationContext()).mApplicationComponent.inject(this);
        super.onCreate(savedInstanceState);
        // your code
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-03
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多