- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何将 @ActivityScoped
的模块注入(inject)到 fragment 中。
我在 Fragment 中需要的模块看起来像这样(它很好地注入(inject)到 Activity 中)
@ActivityScoped
class ClipManager @Inject constructor(private val activity: Activity) { ... }
要将我的 MainActivity
绑定(bind)到 Activity
,我正在使用 ActivityModule
@Module
abstract class MainActivityModule {
@Binds
@ActivityScoped
internal abstract fun bindActivity(mainActivity: MainActivity): Activity
}
为了能够注入(inject)我的MainActivity
,我使用了这个
@Module
abstract class ActivityModule {
@ActivityScoped
@ContributesAndroidInjector(modules = [MainActivityModule::class])
internal abstract fun mainActivity(): MainActivity
}
我有以下 Dagger 组件:
@Singleton
@Component(modules = [
ApplicationModule::class,
AndroidSupportInjectionModule::class,
ActivityModule::class,
FragmentModule::class])
interface AppComponent : AndroidInjector<App> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): AppComponent.Builder
fun build(): AppComponent
}
}
使用常规上下文绑定(bind) ApplicationModule
@Module
abstract class ApplicationModule {
@Binds
@Singleton
internal abstract fun bindContext(application: Application): Context
}
现在我有了 FragmentModule
可以注入(inject) fragment
@Module
abstract class FragmentModule {
@FragmentScoped
@ContributesAndroidInjector
internal abstract fun fragment1(): Fragment1
}
我如何扩展 dagger 以便能够将 ClipManager
注入(inject)到 Fragment1
(它本身位于 MainActivity
中) ?
最佳答案
您需要使 FragmentComponent 成为 ActivityComponent 的子组件。这样做将允许 Fragment 注入(inject)任何绑定(bind)在其父组件中的内容。
您真正需要做的就是从您的 AppComponent
上的模块列表中删除 FragmentModule::class
并将其添加到您的 ActivityComponent 中:
@Module
abstract class ActivityModule {
@ActivityScoped
@ContributesAndroidInjector(modules = [MainActivityModule::class, FragmentModule::class])
internal abstract fun mainActivity(): MainActivity
}
这样它将成为您的 MainActivityComponent 的子组件。
关于android - 将 @ActivityScoped 对象注入(inject) Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49072077/
我在 android 中使用 Dagger2 作为我的依赖注入(inject)器。我面临的问题是 ActivityScope 中的模块数量。因此,与任何其他项目一样,我有两种类型的模块。 Single
如何将 @ActivityScoped 的模块注入(inject)到 fragment 中。 我在 Fragment 中需要的模块看起来像这样(它很好地注入(inject)到 Activity 中)
查看https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/ja
我正在阅读 Dagger2 Component Scopes Test 的源代码在 GitHub 上,我看到了为名为 @ActivityScope 的 Activity 定义的“自定义范围”,但我在其
将 Dagger-android 更改为 Hilt 后,出现以下错误。 @Provides @Singleton @org.jetbrains.annotations.NotNull retrof
假设您有一个应用程序,用户在第一个屏幕上登录,从那一刻起,您可以访问 User 对象。我想在 @SessionScope 下提供此依赖项 - 这意味着,当用户注销时,通过注释为 @SessionSco
我是一名优秀的程序员,十分优秀!