我正在尝试使用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项目上,它工作正常。
答案 0 :(得分:11)
您似乎丢失了protoPayload.serviceData.jobCompletedEvent.job.jobStatistics
上安装的AndroidInjectionModule(如果使用支持片段,则丢失了AndroidSupportInjectionModule)。
应为:
AppComponent