Dagger2问题:“如果没有@Provides注释的方法,将无法提供。”

时间:2018-06-30 09:50:15

标签: java android dependency-injection dagger-2 dagger

我正在尝试使用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项目上,它工作正常。

1 个答案:

答案 0 :(得分:11)

您似乎丢失了protoPayload.serviceData.jobCompletedEvent.job.jobStatistics上安装的AndroidInjectionModule(如果使用支持片段,则丢失了AndroidSupportInjectionModule)。

应为:

AppComponent