匕首2问题与"cannot be provided without an @Provides-annotated method."



我正在尝试使用 Dagger2设置一个新项目,我以前使用过 Dagger2,但现在我正在尝试自己从头开始设置它。我从我参与的 Kotlin 项目中获得了示例,但无法像现在在 Kotlin 中那样为 Java 设置它(或者我可能错过了一些东西(。

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

元件

@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> {
^ 

当然cannot be provided without an @Provides-annotated method.似乎是问题所在,但我只是不知道如何解决它。它在我的 kotlin 项目上运行良好,其他人设置。

看起来您缺少安装在AppComponent上的AndroidInjectionModule(如果您使用支持片段,则为AndroidSupportInjectionModule(。

它应该是这样的:

@Component(modules = {AndroidInjectionModule.class, MainAppModule.class})

相关内容

最新更新