【发布时间】:2019-09-12 20:47:29
【问题描述】:
我需要三级继承并用dagger2注入
1.MainActivity
--1.1 MainSubActivity
----1.1.1 MainSubActivityOne
----1.1.2 MainSubActivityTwo(与MainSubActivityOne结构相同)
主活动
public abstract class MainActivity<T extends MainPresenter> extends BaseActivity implements MainView{
@Inject
protected T mPresenter;
}
主讲者
public abstract class MainPresenter<T extends MainView> extends BasePresenter<T> { ... }
主视图
public interface MainView extends BaseView{ ... }
-- 主子活动
public abstract class MainSubActivity extends MainActivity<MainSubPresenter> implements MainSubView { ... }
-- MainSubPresenter
public abstract class MainSubPresenter<T extends MainSubView> extends MainPresenter<T> { ... }
-- 主子视图
public interface MainSubView extends MainView { ... }
---- MainSubActivityOne(与 MainSubActivityTwo 相同):
public class MainSubActivityOne extends MainSubActivity implements MainSubViewOne{
@Override
protected void onCreatePresenter(){
mPresenter.setView(this);
mPresenter.onCreate();
}
@Override
protected void initializeDagger() {
getActivityComponent().inject(this);
}
}
---- MainSubPresenterOne(与 MainPresenterTwo 相同):
public class MainSubPresenterOne extends MainSubPresenter<MainSubViewOne> { ... }
---- MainSubViewOne(与 MainSubViewTwo 相同):
public interface MainSubViewOne extends MainSubView { ... }
活动组件
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules =
{ActivityModule.class})
public interface ActivityComponent {
void inject(MainActivity mainActivity);
}
活动模块
@Provides
@PerActivity
MainPresenter provideMainPresenter() {
return new MainSubPresenterOne();
}
当我只有两个级别时,一切正常,但现在我得到这个错误:
...components/ActivityComponent.java:90: error: [Dagger/MembersInjection] Cannot inject members into raw type com.example.main.MainActivity
void inject(MainActivity mainActivity);
^
com.example.main.MainActivity is injected at
...components.ActivityComponent.inject(com.example.main.MainActivity)
如果我将活动组件更改为:
void inject(MainSubActivityOne activity);
void inject(MainSubActivityTwo activity);
我得到了下一个错误:
.../components/ActivityComponent.java:92: error: [Dagger/MissingBinding] com.example.main.MainSubPresenterOne cannot be provided without an @Provides-annotated method.
void inject(MainSubActivityOne mainActivity);
^
com.example.main.MainSubPresenter is injected at
com.example.main.MainActivity.mPresenter
com.example.main.MainSubPresenterOne is injected at
...components.ActivityComponent.inject(com.example.main.MainSubActivityOne)
【问题讨论】:
标签: android inheritance abstract-class dagger-2