Dagger2问题:"无法提供没有@Provides注释的方法。"

10

我正在尝试使用Dagger2设置一个新项目,之前我已经使用过Dagger2,但现在我正在尝试自己从头开始搭建。我正在使用一个Kotlin项目的示例,但无法像Kotlin一样将其设置为Java(或者我可能漏掉了什么东西)。

只是一个单一的组件、单一的模块和应用程序。

组件(Component)

@Singleton
@Component(modules = {MainAppModule.class})
public interface AppComponent extends AndroidInjector<App> {
@Component.Builder
abstract class Builder implements AndroidInjector.Factory<App> {

    public AppComponent create(App application) {
        seedApplication(application);
        return build();
    }

    @BindsInstance
    abstract void seedApplication(App application);

    abstract AppComponent build();
}
}

模块

@Module
abstract class MainAppModule {

@Binds
abstract public Application bindApplication(App application);

@ContributesAndroidInjector
abstract public MainActivity contributeActivityInjector();
}

*应用*

public class App extends DaggerApplication {

@Override
public AndroidInjector<? extends DaggerApplication> applicationInjector() {
    return DaggerAppComponent.builder().create(this);
}
}

目前我没有任何使用@Inject的类,但是在编译时出现了错误:

 error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.content.BroadcastReceiver>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.content.BroadcastReceiver>>> cannot be provided without an @Provides-annotated method.
public interface AppComponent extends AndroidInjector<App> {
        ^ 

当然,不能提供没有@Provides注释的方法似乎是问题所在,但我不知道如何解决。它在我的Kotlin项目上运行良好,那是别人设置的。

为了完整起见,您能否在Gradle文件(或其他构建文件)中展示与Dagger相关的代码行? - Jeff Bowman
1个回答

28

很抱歉 @KursoR,这仍然会出现相同的错误。 - Krzysztof Kubicki
我认为这与@ContributesAndroidInjector有关。;/ - Krzysztof Kubicki
2
也许现在这是另一个错误?Map<Class<? extends BroadcastReceiver>, AndroidInjector.Factory<? extends BroadcastReceiver>>由AndroidInjectionModule提供(来源),因此应该得到解决。 - KursoR
你说得太对了,非常感谢。我非常希望能够解释一下这些额外的模块以及为什么我需要添加它们(在 Kotlin 项目中我没有它们)。很奇怪的事情。无论如何,非常感谢。 - Krzysztof Kubicki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接