当前位置: 首页 > 知识库问答 >
问题:

Dagger 2如何为基本活动组件创建一个模块,并为所有MVP组件创建一个单独的模块

沈博延
2023-03-14
@inject
public ApiClient mClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mManager = new SharedPreferencesManager(this);
    DaggerInjector.get().inject(this);
}
public class DaggerInjector {
private static AppComponent appComponent = DaggerAppComponent.builder().appModule(new AppModule()).build();

public static AppComponent get() {
    return appComponent;
}
}



@Component(modules = {AppModule.class,  ApiModule.class, MvpModule.class})
@Singleton
public interface AppComponent {

    void inject(BaseActivity activity);


}

API

@Singleton
@Component(modules = {ApiModule.class})
public interface ApiComponent {
    void inject( BaseActivity activity);
}



@Module
public class ApiModule {

    @Provides
    @Singleton
    public ApiClient getApiClient(){
        return new ApiClient();
    }
}

MVP

@Singleton
@Component(modules = {MvpModule.class})
public interface MvpComponent {
    void inject(BaseActivity activity);
}

@Module
public class MvpModule {

    @Provides
    @Singleton
    public MvpPresenter getMvpPresenter(){ return new MvpPresenter();}
}



Error:(16, 10) error: ApiClient cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method. This type supports members injection but cannot be implicitly provided.
ApiClient is injected at
...BaseActivity.ApiClient
...BaseActivity is injected at
MvpComponent.inject(activity)

共有1个答案

叶光华
2023-03-14

我发现了我的问题。我需要使用一个子组件。

@Singleton
@Subcomponent(modules = {MvpModule.class})
public interface MvpComponent {
    void inject(BaseActivity activity);
}

@Module
public class MvpModule {

    @Provides
    @Singleton
    public MvpPresenter getMvpPresenter(){ return new MvpPresenter();}
}

dagger-我们应该为每个活动/片段创建每个组件和模块吗

 类似资料:
  • 本文向大家介绍libgdx 创建一个组件,包括了libgdx 创建一个组件的使用技巧和注意事项,需要的朋友参考一下 示例 组件只是实现Ashley组件类的实例。 组件映射提供了一种访问实体上组件的快速方法。管理组件映射的两种常用方法是在组件的类中保留静态实例,或者使类/枚举包含所有组件的所有映射器。 您无需在应用程序中多次声明组件类型的映射器。

  • 问题内容: Play框架文档在模块创建方面有些薄弱。 如何创建一个模块? 我已经读到大型应用程序可以分为多个模块,如何? 模块不能/不能做什么?(是否可以访问低级API?) 播放模块可以公开抽象的JPA类吗? 打包模块的最佳方法是什么? 如何部署/分配播放模块? 我想您有个主意…向我们介绍所有使用Playframework的模块。 问题答案: 如何创建一个模块? 我已经读到大型应用程序可以分为多个

  • 本文向大家介绍aurelia 创建一个基本模板,包括了aurelia 创建一个基本模板的使用技巧和注意事项,需要的朋友参考一下 示例 在Aurelia中,所有HTML模板都在开始和结束<template></template>标记内定义。您所有HTML和Aurelia特定的逻辑都在这些模板标记内,并且不能在它们之外存在。            

  • 问题内容: 如何在Magento中完成以下任务? 使用控制器/视图/模型方法显示“ Hello World”消息。因此,如果我去过,它将显示字符串“ Hello World”。能够在我的网站模板中显示此字符串(例如,页眉,页脚等)将是一个好处。 如何向该控制器(如果需要,或新控制器)添加方法,该方法与模型交互并执行查询,并将行(包含columns )返回给控制器?然后使用控制器包含一个视图,该视图

  • 行动时刻 - 为您的组织创建RADIUS PKI 本书的目的不是取代现有的文档。 FreeRADIUS配置目录下的certs子目录中有一个很好的README文件。按照说明为您的组织创建一组新证书。 如果你有一个辅助FreeRADIUS服务器,你可以使用server.cnf文件;备份主FreeRADIUS服务器的配置并修改它以为辅助RADIUS服务器创建证书。注意不要覆盖主FreeRADIUS服务器

  • 问题内容: 我已经在React文档中读到,“如果”类型语句不能在JSX代码中使用,由于JSX呈现到javascript中的方式,它无法正常工作。 但是,有什么理由为什么实现“ if”组件不是一个好主意?从我的初始测试来看,它似乎工作正常,并且使我想知道为什么不经常这样做? 我的部分意图是让反应开发尽可能地基于标记,并且使用尽可能少的javascript。在我看来,这种方法更像是一种“数据驱动”方法