java Dagger无法提供我的依赖项
我的匕首2有问题。 我想要一个通用的网络模块,在那里我可以分享我的改造,等等。。然后,稍后我需要子组件,以便每个流都有不同的改型接口,例如登录
我现在的设置是:
@Module
public class NetworkModule {
@Provides
@Singleton
@Named("Default")
Retrofit provideRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("myUrl")
.build();
return retrofit;
}
}
我还有一个ApplicationModule(我不知道这是否是拥有ApplicationModule的正确方法)
@Module
public class ApplicationModule {
private Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Application providesApplication() {
return this.application;
}
}
最后但并非最不重要的是,我的组件将两者结合在一起:
@Singleton
@Component(modules = {ApplicationModule.class, NetworkModule.class})
public interface NetworkComponent {
Retrofit provideRetrofit();
void inject(MainActivity activity);
}
现在我看不出问题,但当我看到时:
((MyApplication) getApplication()).getNetworkComponent().inject(this);
其中,创建为:
DaggerNetworkComponent.builder().applicationModule(new ApplicationModule(this)).build();
我无法编译,我得到错误:
改造2。如果没有@Inject构造函数或@Provides-或@products注释方法,则无法提供改装
# 1 楼答案
将
@Named("Default")
添加到NetworkComponent
中的Retrofit provideRetrofit();
中# 2 楼答案
关于dagger 2和改装的使用,您可以参考以下课程:
注射器。java
AppComponent。java
api模块。java与您的网络模块类类似
AppModule。java
稍后在活动类中,您可以使用
Injector.component().inject(this);
注入dagger 2依赖项有关更多说明,请参阅thisgithub repo