4
我需要从ApplicationModule
公开我的OkHttpClient
,所以我添加到ApplicationComponent
。事情是这样的:Dagger ApplicationComponent必须设置
@Module
public class ApplicationModule {
@Provides @Singleton
public OkHttpClient provideOkHttpClient() {
final OkHttpClient.Builder client = new OkHttpClient.Builder();
return client.build();
}
@Singleton
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
OkHttpClient okHttpClient();
}
所以我在ApplicationComponent
添加OkHttpClient okHttpClient();
,你可以看到正上方。
现在在我的NetworkModule
我用它喜欢:
@Module
public class NetworkModule {
@Provides @ActivityScope
public ProjectService provideProjectService(OkHttpClient client) {
return new ProjectService(client);
}
@Component(dependencies = {ApplicationComponent.class}, modules = {NetworkModule.class})
@ActivityScope
public interface NetworkComponent {
void inject(@NonNull MyActivity myActivity);
}
但现在,当我得到一个运行时错误:
Caused by: java.lang.IllegalStateException: css.test.demo.ApplicationComponent must be set
at css.test.demo.main.projects.network.DaggerNetworkComponent$Builder.build(DaggerNetworkComponent.java:102)
at css.test.demo.main.projects.MyActivity.onCreate(MyActivity.java:159)
at android.app.Activity.performCreate(Activity.java:6237)
,这里是我是如何建造起来MyActivity:
NetworkComponent = DaggerNetworkComponent.builder()
.NetworkModule(new NetworkModule(this))
.build();
NetworkComponent.inject(this);
如果我不希望一些类的应用程序模块例如在一个类中完全依赖,那我该如何在网络模块中包含applicationModule,但其他类只需要网络模块来完成依赖关系。请帮忙。 –
@eCDroid如果网络模块依赖于应用程序模块,而其他模块依赖于网络模块,那么这个其他模块也取决于应用程序模块,但您总是可以拆分/重构模块或创建新模块。 –