- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要从 ApplicationModule
公开我的 OkHttpClient
,所以我添加到 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);
最佳答案
我想强调的是,dagger 不包含任何魔法——它只是普通的 java。如果您不给它所需的信息,编译器就会报错。
如果您查看 DaggerNetworkComponent.Builder
,您会注意到它有一个名为 appComponent(AppComponent component)
的方法。这是 dagger 希望您添加 NetworkComponent
所依赖的 appcomponent 的地方。
NetworkComponent = DaggerNetworkComponent.builder()
.NetworkModule(new NetworkModule(this))
.appComponent(((App)getApplication()).getAppComponent()) // add your appComponent
.build();
它应该可以工作。
关于android - 必须设置 Dagger ApplicationComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37496432/
我刚开始在 Android 上使用 Dagger Hilt 进行依赖注入(inject),我在 Android Studio 上收到警告说 'ApplicationComponent' is depr
我需要从 ApplicationModule 公开我的 OkHttpClient,所以我添加到 ApplicationComponent。像这样: @Module public class Appli
我正在尝试在我的项目中使用 Hilt 注入(inject)。我将依赖项添加到我的 build.gradle 文件中,然后创建了基础应用程序类,该类继承自 Applcication(),并使用 @Hil
我在一个多模块项目中使用 Hilt,并且有一个具有 ApplicationComponent 作用域的模块。我希望这个模块提供的所有东西都像一个单例,并且在应用程序的生命周期内只创建一次。但是,我看到
我想返回泛型类型以由子图公开,问题出在自动生成的 java 类中,我尝试做一些事情,但解决它的一种方法是从 AppComponent 中删除泛型类型和返回简单对象。还有更“正确”的方法吗? 这是 Ap
我正在尝试将 Dagger 刀柄包含到我的多模块项目中,只有三个模块(app、frameworks_and_drivers、interface_adapters)。我按照刀柄文档 https://de
升级 Dagger 后(版本:2.31-alpha)ApplicationComponent.class找不到。Component 的替代方法是什么?喜欢 RoomDatabase? @Module
我是一名优秀的程序员,十分优秀!