作者:dfpkgih | 来源:互联网 | 2022-12-12 10:27
我正在尝试用Dagger2设置一个新项目,之前我使用过Dagger2,但现在我正试图自己设置它.我从Kotlin项目中得到了一个例子,但我不能像现在在Kotlin中那样设置Java(或者我可能缺少一些东西).
它只是一个组件,单个模块和应用程序.
零件
@Singleton
@Component(modules = {MainAppModule.class})
public interface AppComponent extends AndroidInjector {
@Component.Builder
abstract class Builder implements AndroidInjector.Factory {
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,javax.inject.Provider>> cannot be provided without an @Provides-annotated method.
public interface AppComponent extends AndroidInjector {
^
当然cannot be provided without an @Provides-annotated method.
似乎是问题,但我只是不知道如何解决它.它在我的kotlin项目上运行正常,其他人也设置好了.
1> KursoR..:
您似乎缺少AndroidInjectionModule(如果使用支持片段,则为AndroidSupportInjectionModule)AppComponent
.
应该是这样的:
@Component(modules = {AndroidInjectionModule.class, MainAppModule.class})
也许现在这是另一个错误?`地图<类<?扩展BroadcastReceiver>,AndroidInjector.Factory <?扩展BroadcastReceiver >>`由AndroidInjectionModule提供([source](https://github.com/google/dagger/blob/master/java/dagger/android/AndroidInjectionModule.java)),所以应该解决