我正在尝试使用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项目上运行良好,那是别人设置的。