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

Dagger 2不生成子组件实现

葛阳
2023-03-14

我已经开始设置匕首2,并面临一个奇怪的问题,看起来像一个bug对我来说。

我有1个主组件和2个子组件,我‘加’在父组件中。我为每个子组件使用不同的作用域。问题是,我可以很容易地为第一个子组件进行字段注入,但我不能为第二个子组件进行相同的注入。注入的字段保持null%s。

@Singleton
@Component(modules = { WalletSaverAppModule.class })
public interface MyAppComponent {
  TrackingComponent plus(TrackingModule module);

  DashboardComponent plus(DashboardModule module);
}
@PerActivity @Subcomponent(modules = { DashboardModule.class })
public interface DashboardComponent {
  void inject(MainActivity activity);
}
@PerService @Subcomponent(modules = { TrackingModule.class })
public interface TrackingComponent {
  void inject(IntentService context);
}
public class TrackingService extends IntentService {
  @Inject CallCase mCallCase;
  @Inject CallModelMapper mCallModelMapper;
  ...

@Override protected void onHandleIntent(Intent intent) {
((MyApp) getApplication()).getAppComponent().plus(new TrackingModule(this)).inject(this);
// ---> here the both fields are null
...

我正在注射的对象:

@Singleton public class CallCase {
  private CallRepository mCallRepository;

  @Inject public CallCase(final CallRepository userRepository) {
    mCallRepository = userRepository;
  }

  public Observable<Call> execute() {
    ...
  }
}

@Singleton public class CallModelMapper {
  @Inject CallModelMapper() {
  }

  public CallModel transform(@NonNull final Call callEntity) {
    ...
  }
}

这两个对象都具有@singleton作用域(作为它们的构造函数字段)。会不会是范围冲突?

---更新---

我已经检查了由Dagger2生成的类(DaggerMyAppComponent),我正在MyApp中使用它来构建应用程序组件。我发现了第一个和第二个组件实现之间的区别。

private final class DashboardComponentImpl implements DashboardComponent {
    private final DashboardModule dashboardModule;

    private Provider<DashboardMvp.Presenter> providesPresenterProvider;

    private MembersInjector<MainActivity> mainActivityMembersInjector;

    private DashboardComponentImpl(DashboardModule dashboardModule) {
      this.dashboardModule = Preconditions.checkNotNull(dashboardModule);
      initialize();
    }

    private void initialize() {...}

    @Override
    public void inject(MainActivity activity) {...}
  }
private final class TrackingComponentImpl implements TrackingComponent {
    private final TrackingModule trackingModule;

    private TrackingComponentImpl(TrackingModule trackingModule) {
      this.trackingModule = Preconditions.checkNotNull(trackingModule);
      // ---> look, missing call initialize() <---
    }

    @Override
    public void inject(IntentService context) {...}
  }

共有1个答案

司空凌
2023-03-14

在TrackingComponent中,为什么要注入IntentService。也许改成TrackingService会有帮助

void inject(TrackingService context);
 类似资料:
  • 我的应用程序中有以下Dagger2架构: 其中:AppComponent: UserComponent: ActivityComponent: ChatComponent: 首先,如何将不同的注入到类中?要么是应用程序,要么是活动?? 其次,我在编译代码时遇到了一个奇怪的问题,错误是: 错误:(23,10)错误:br.com.animaeducacao.ulife.domain.interacto

  • :此接口包含此组件所需的所有方法。 现在,问题是,如果我在中执行此调用,则此类不是由Dagger生成的。如果调用相同的行,则由dagger生成de类,不会有任何问题。 我寻找的另一个解决方案是创建一个具有相同结构的其他不同类,并将作为内部对象,结果也是一样。

  • V1.1.1新增 Comments($table,$post_id,$params=array()) 功能: 生成评论组件 参数: $table:评论对象所在的表,不带表前缀 $post_id:评论对象的id $params:额外参数,类型为数组,目前只支持tpl参数 模板中使用 <!-- 评论文章表里的某个ID为$object_id的文章--> {:Comments("posts",$obje

  • 我正在尝试使用criteriaBuilder和谓词构建一个SQL where子句,以创建一些SQL语句,如: AND或对列表周围的括号对于将它们与不存在分开很重要。这是因为和有优先权我得到的是 我可以构建所有谓词,没有问题,但我不知道如何让它在AND或PAIRES列表中添加括号 AND或OR对的列表是这样构建成1个谓词列表的 子查询是这样添加的 还有地点 每个AND或AND对周围的括号也一样好

  • 问题内容: 我正在尝试通过学习本教程来学习hyperjaxb 。我遵循了所有指示,直到标题部分。这包括以下步骤: 但是什么也没产生。没有目录,也没有。我对整个目录结构进行了关键字搜索,以确认运行后这些资源不存在。我也将目录结构导入到新的Eclipse Maven项目中,并在新的Eclipse Maven项目中进行了尝试,但同样缺少结果。 如何使本教程生成预期的生成文件? 另外,是否有更好的方法从x

  • 我试图使用Flux.create生成异步服务器发送事件。当我的客户端连接时,请求最终超时,并且没有收到任何事件。我硬编码了一个由Flux发送的事件。创建只是为了查看数据流,但客户端仍然没有收到任何数据。 客户端(Angular)代码: 我从来没有看到一个事件来自事件源。最终请求超时,我看到错误:< code > net::ERR _ EMPTY _ RESPONSE 我是使用WebFlux的新手,