依赖注入提供 activity

dependency injection provide activity

我想添加一个 activity 作为我的 类

之一的依赖项
class ViewHandler{
    @inject public ViewHandler(Myactivity myactivity){
        this.activity = myactivity;
    }
}

如何在不被 Activity 生命周期

阻碍的情况下执行此操作

您需要为此使用带有模块的子范围组件。

@Singleton
@Component(modules={SomethingModule.class})
public interface ApplicationComponent {
    Something something();
}

@Module
public class SomethingModule {
    @Provides
    @Singleton
    public Something something() {
        return new Something();
    }
}

@ActivityScope
@Component(dependencies={ApplicationComponent.class}, modules={MyActivityModule.class})
public interface MyActivityComponent extends ApplicationComponent {
    ViewHandler viewHandler();

    void inject(Myactivity myActivity);

}

@Module
public class MyActivityModule {
    private Myactivity myActivity;

    public MyActivityModule(Myactivity myActivity) {
        this.myActivity = myActivity;
    }

    @Provides
    public Myactivity myActivity() {
        return myActivity;
    }

    @Provides
    @ActivityScope
    public ViewHandler viewHandler(Myactivity myActivity) {
        return new ViewHandler(myActivity);
    }
}

public class CustomApplication extends Application {
    ApplicationComponent applicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        applicationComponent = DaggerApplicationComponent.create();
    }

    public ApplicationComponent getApplicationComponent() {
        return applicationComponent;
    }
}


public class Myactivity extends AppCompatActivity {
    MyActivityComponent myActivityComponent;

    @Inject
    ViewHandler viewHandler;

    @Override 
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        CustomApplication customApp = (CustomApplication)getApplicationContext();
        this.myActivityComponent = DaggerMyActivityComponent.builder()
            .applicationComponent(customApp.getApplicationComponent())
            .myActivityModule(new MyActivityModule(this))
            .build(); //preserve the state of your dependencies in onSaveInstanceState();
        myActivityComponent.inject(this);
    }
}

编辑:另一个选项是 @Subcomponent 注释

@Singleton
@Component(modules={SomethingModule.class})
public interface ApplicationComponent {
    Something something();

    MyActivityComponent newMyActivityComponent(MyActivityModule myActivityModule);
}

@ActivityScope
@Subcomponent(modules={MyActivityModule.class}) 
public interface MyActivityComponent {
    ViewHandler viewHandler();
    void inject(Myactivity myActivity);
}

public class Myactivity extends AppCompatActivity {
    MyActivityComponent myActivityComponent;

    @Inject
    ViewHandler viewHandler;

    @Override 
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        CustomApplication customApp = (CustomApplication)getApplicationContext();
        this.myActivityComponent = customApp.getApplicationComponent()
                                            .newMyActivityComponent(new MyActivityModule(this));
        myActivityComponent.inject(this);
    }
}