Jam*_*mol 5 android kotlin dagger-2
AppComponent:
@PerApplication
@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
}
Run Code Online (Sandbox Code Playgroud)
AppModule:
@Module(subcomponents = arrayOf(ActivityComponent::class))
class AppModule(private val context: Context) {
@Provides @PerApplication
fun provideContext() = context
@Provides @PerApplication
fun provideSharedPreferences(context: Context)
= context.getSharedPreferences("${context.packageName}.preferences", Context.MODE_PRIVATE)
@Provides @PerApplication
fun provideMoshi() = Moshi.Builder().build()
@Provides @PerApplication
fun provideRetrofit(moshi: Moshi): Retrofit {
return Retrofit.Builder()
.baseUrl("https://reqres.in")
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.build()
}
}
Run Code Online (Sandbox Code Playgroud)
ActivityComponent:
@PerActivity
@Subcomponent(modules = arrayOf(ActivityModule::class))
interface ActivityComponent {
fun inject(activity: MainActivity)
@Subcomponent.Builder
interface Builder {
fun activityModule(module: ActivityModule): Builder
fun build(): ActivityComponent
}
}
Run Code Online (Sandbox Code Playgroud)
ActivityModule:
@Module
class ActivityModule(private val activity: FragmentActivity) {
@Provides @PerActivity
fun provideActivity() = activity
@Provides @PerActivity
fun provideTestApi(retrofit: Retrofit) = retrofit.create(TestApi::class.java)
}
Run Code Online (Sandbox Code Playgroud)
如何获得ActivityComponentinto的 Builder 实例MainActivity?
活动是由 Dagger 创建的,所以我不能像官方文档中给出的例子那样将提供者注入到构造函数中。
我尝试使用 dagger-2.7 之前的方式创建子组件,方法是将以下行添加到AppComponent:
fun activityComponent(module: ActivityModule): ActivityComponent
Run Code Online (Sandbox Code Playgroud)
并在MainActivity:
(application as App).appComponent.activityComponent(ActivityModule(this)).inject(this)
Run Code Online (Sandbox Code Playgroud)
这给了我:
错误:[com.example.injection.ActivityComponent.inject(com.example.modules.main.MainActivity)] com.example.api.TestApi 不能在没有 @Provides 注释的方法的情况下提供。
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |