首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注入presenter - Dagger 2

注入presenter - Dagger 2
EN

Stack Overflow用户
提问于 2017-07-02 02:19:34
回答 1查看 401关注 0票数 0

我可能会在片断上注入我的演示者,但我不知道为什么,我认为我做的一切都是正确的,我有点绝望。

错误如下:

代码语言:javascript
复制
Error:(20, 10) error: com.drivero.locationreminder.presentation.main.presenter.ReminderListPresenterImpl cannot be provided without an @Inject constructor or from an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.
com.drivero.locationreminder.presentation.main.presenter.ReminderListPresenterImpl is injected at
com.drivero.locationreminder.infrastructure.di.module.PresenterModule.provideReminderListPresenter(presenter)
com.drivero.locationreminder.presentation.main.presenter.ReminderListPresenter is injected at
com.drivero.locationreminder.presentation.main.fragment.ReminderListFragment.presenter
com.drivero.locationreminder.presentation.main.fragment.ReminderListFragment is injected at
com.drivero.locationreminder.infrastructure.di.component.ViewComponent.inject(reminderListFragment)

这是我的组件:

代码语言:javascript
复制
@ViewScope
@Component(dependencies = ApplicationComponent.class,
        modules = {ViewModule.class, PresenterModule.class})
public interface ViewComponent {

    void inject(MainActivity mainActivity);

    void inject(ReminderListFragment reminderListFragment);
}

这是我的模块:

代码语言:javascript
复制
@Module
public class ViewModule {
    private Activity activity;
    private Fragment fragment;

    public ViewModule(Activity activity) {
        this.activity = activity;
    }

    public ViewModule(Fragment fragment) {
        this.fragment = fragment;
    }

    @Provides
    @ViewScope
    Context context() {
        return activity;
    }

    @Provides
    @ViewScope
    Activity activity() {
        return activity;
    }

    @Provides
    @ViewScope
    Fragment fragment() {
        return fragment;
    }

    @Provides
    @ViewScope
    Navigator navigator() {
        return new Navigator(activity);
    }

}

@Module
public class PresenterModule {

    @Provides
    @ViewScope
    ReminderListPresenter provideReminderListPresenter(ReminderListPresenterImpl presenter) {
        return presenter;
    }

}

这是我的演示者:

代码语言:javascript
复制
    public interface ReminderListPresenter extends Presenter<ReminderListView> {

    void onClickCreate();
}

public class ReminderListPresenterImpl extends BasePresenter<ReminderListView> implements ReminderListPresenter {

    @Override
    public void initialize(ReminderListView view) {
        super.initialize(view);
    }

    @Override
    public void onClickCreate() {
        navigator.goToCreateReminder();
    }
}

和我的片段:

代码语言:javascript
复制
@ViewScope
public class ReminderListFragment extends BaseFragment implements ReminderListView {

    @BindView(R.id.reminderList)
    private RecyclerView reminderList;
    @BindView(R.id.floatingActionButton)
    private FloatingActionButton createReminderButton;

    @Inject
    ReminderListPresenter presenter;

    public static Fragment getNewInstance() {
        return new ReminderListFragment();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter.initialize(this);
    }

    @Override
    public int getLayoutContainer() {
        return R.layout.fragment_reminder_list;
    }

    @Override
    public void initializeInjector() {
        buildInjector(new ViewModule(this)).inject(this);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
}

欢迎任何建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-02 02:28:25

你正在尝试注入一个RemainderListPresenterImpl。这意味着模块中的某些函数必须提供RemainderListPresenterImpl,或者RemainderListPresenterImpl必须有一个标记为@Inject的构造函数。否则它不知道如何构造一个来注入它。这可以像一个没有主体的0参数构造函数一样简单,标记为@Inject。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44864061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档