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

Dagger组件具有冲突的作用域

孙清野
2023-03-14

我正在使用Dagger,我有一个应用程序组件和一个子组件,分别具有@Singleton范围和@Singleton范围。现在,当我编译它时,我得到了以下错误:

[io.droid.nowtellapp.dagger.SignInMvpComponet]io.droid.nowtellapp.dagger.SignInMvpComponet具有冲突的作用域:io.droid.nowtellapp.dagger.Application ationComponent也具有@Singleton

为了解决此错误,我从我的子计算机中删除了@Singleton,并对其进行了编译,这次得到了此错误:

错误:(12,1)错误:io.droid.nowtellapp.dagger.SignInMvpComponet(无作用域)可能没有引用作用域绑定:@Singleton@提供io.droid.nowtellapp.mvp.SignInMvp。演讲者io.droid.nowtellapp.dagger.SignInMvpModule.presenter(io.droid.nowtellapp.webservices.现在TellApi)

还将获取此错误:

错误:(21,8)错误:[ComponentProcessor:MiscError]匕首。内部的科德根。ComponentProcessor无法处理此类,因为无法解析其所有依赖项。检查编译错误或生成代码的循环依赖关系。

这是我的应用程序组件

@Singleton
@Component(modules = {AppModule.class, RetroApiModule.class})
public interface ApplicationComponent {

void inject(MainActivity mainActivity);

SignInMvpComponet signInMvpComponet(SignInMvpModule signInMvpModule);
}

这是我的SignInMvpComponet

@Subcomponent(modules = {SignInMvpModule.class})
public interface SignInMvpComponet {
void inject(SignInFragment signInFragment);

这是一个模块类

@Module
public class SignInMvpModule {
private final SignInMvp.View view;

public SignInMvpModule(SignInMvp.View view) {
    this.view = view;
}

@Singleton
@Provides
SignInMvp.Presenter presenter(NowTellApi api) {
    return new SignInPresenter(view,api);
}
}

如何解决这个问题?提前谢谢。

共有1个答案

朱海超
2023-03-14

我有一个带有@Singleton scope的应用程序组件,还有一个带有@Singleton scope的子组件。

不可以。子组件不能与其父组件具有相同的作用域。您可以在文档中阅读:

没有子组件可以与任何祖先组件关联到相同的作用域,尽管两个不可相互访问的子组件可以与相同的作用域关联,因为在哪里存储作用域对象没有歧义。

第一个错误是因为父组件和子组件共享相同的范围,第二个错误是因为子组件需要一个范围。解决这两个错误的方法是给子组件一个不同于父组件的作用域,或者根本不使用子组件(如果它们都应该是@Singleton,为什么需要2?)

通常,我们倾向于为我们的子组件创建像@Peractive或ActivityScoped这样的作用域,这些子组件共享活动的生命周期,并在其中使用。

 类似资料:
  • 使用: 所有类都在中生成,在中没有类。没有-p开关,所有xsd都是在它们自己的默认包中生成的。但无法告诉wsimport为每个XSD使用特定的包。现在我使用以下绑定文件,这可能是不正确的,但wsimport对此没有抱怨: 在包org.broker.wsi.b_2和org.broker.wsi.t_1中,不生成任何文件。 欢迎提出建议。

  • 当将Dagger2和Android数据绑定添加到我的项目中时,我会遇到以下构建时间错误。这似乎是一个已知的问题(参见[1]或[2]),因为我得到了完全相同的错误。不幸的是,我不能解决他们(像其他人一样)。是否有人有一个完整的工作设置与当前版本的匕首2和数据绑定,并可以帮助?

  • 在令牌冲突的情况下,如何定义ANTLR lexer行为?让我解释一下“冲突”标记的含义。例如,假设定义了以下内容: 这里有一个冲突,因为在读取一系列数字后,lexer将不知道是有一个INT还是多个INT\u阶段标记(或两者的不同组合)。测试之后,如果INT是在INT\u阶段之后定义的,那么lexer会更喜欢查找INT\u阶段,但可能不是INT?否则,将找不到INT\u阶段。 另一个例子是: 我被告

  • 这里是我需要完成的,但是我刚开始哈希&甚至不知道从哪里开始。有人能帮帮我吗? 对由5个字符(A-Z和A-Z中的字符)组成的文本词设计一个名为Bailando的哈希函数。 提供一个算法(一组操作)来生成哈希函数的输出。尝试提出一个看起来没有冲突的哈希设计。 什么是基于您的设计的Bailando(“hello”)、Bailando(“three”)和Bailando(“olleh”)。 是否可以在哈希

  • 我有以下格式化程序: 就我对文档的理解而言,它应该只在没有解析值的情况下尝试替换默认值。似乎这工作的月份,因为我有不同的月份与默认的一个分析。然而,它多年来都不起作用。 我用错了吗?有人能告诉我是否有不同的方法来定义模式中可能不存在的字段的默认值吗?

  • 我创建了一个使用jackson 2.7.5的优步jar。我使用的是spark 1.6.2(因为我使用的是scala-2.10)。然而,每当我尝试提交我的spark作业时,我都会遇到错误,即在更新的jackson版本的功能开关上找不到任何方法。 我会假设一个uber-jar会允许我捆绑我自己的依赖项,即使它们与使用某种委托类加载器来隔离冲突需要运行的火花相冲突。不是这样吗?如果不是,我该如何解决这个