gpt4 book ai didi

java - kotlin dagger改造现场注入(inject)

转载 作者:行者123 更新时间:2023-12-02 02:15:18 26 4
gpt4 key购买 nike

当尝试使用 dagger 注入(inject)字段变量时,我得到了 null。这是文件。有些是 Java 语言,有些是 Kotlin 语言

应用程序.java

   public class App extends DaggerApplication{


@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.builder().application(this).build();
}
}

AppComponent.kt

@Singleton
@Component(modules = arrayOf(
NetworkModule::class,
ApplicationModule::class,
AndroidSupportInjectionModule::class
))
interface AppComponent : AndroidInjector<TBApplication> {


@Component.Builder
interface Builder {

@BindsInstance
fun application(application: Application): AppComponent.Builder

fun build(): AppComponent
}
}

网络模块.kt

@Module
class NetworkModule {

@Provides
@Singleton
fun provideOkHttpClient(): OkHttpClient {
val builder = OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
val interceptor = HttpLoggingInterceptor()
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
builder.addInterceptor(interceptor).build()
}
return builder.build()
}

@Singleton
@Provides
fun provideRetrofit(client: OkHttpClient): Retrofit {
val retrofit = Retrofit.Builder()
.baseUrl(BaseApi.SITE_ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
return retrofit
}


}

//需要进行注入(inject)的存储库

    class Repository {

private var examsService: BlogExamsService

@Inject
var retrofit: Retrofit? = null

init {
// retrofit is null here
examsService = retrofit?.create(BlogExamsService::class.java)!!
}
}

最佳答案

字段注入(inject)将不起作用,因为您不运行 inject() 方法。

要使其适合您的方法,您应该调用 Repository 类:

App.self.getComponent().inject(this)

地点:

self 是应用程序的静态实例

getComponent() ApplicationComponent

的公共(public) getter

虽然我不会在你的情况下推荐它,但这是对 DI 框架的滥用。

您应该创建 RepositoryRepositoryModule@Provide 实例,就像您对 NetworkModule 所做的那样。

关于java - kotlin dagger改造现场注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com