- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设您有一个应用程序,用户在第一个屏幕上登录,从那一刻起,您可以访问 User
对象。我想在 @SessionScope
下提供此依赖项 - 这意味着,当用户注销时,通过注释为 @SessionScope
的组件提供的所有依赖项都会消失。
尽管依赖项通过@SessionScope
提供,但我希望通过@ActivityScope
提供依赖项,例如ActivityPresenter
,当然,我必须将 @SessionScope
和 @ActivityScope
的依赖项一起提供给 Activity
消费者类。
使用 Dagger 2 的新 AndroidInjector
功能最好的做法是什么?
到目前为止,我能够在 @ActivityScope
下提供依赖项,如下所示:
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityScope
@Module
abstract class ActivitiesBuilder {
@ActivityScope
@ContributesAndroidInjector(modules = arrayOf(HomepageModule::class, FacebookModule::class))
abstract fun providesHomepageViewImpl(): HomepageViewImpl
}
@Module
abstract class AppModule {
@Provides
@Singleton
fun provides (application: Application) : Context = application
}
@Singleton
@Component(
modules = arrayOf(
AndroidInjectionModule::class,
ActivitiesBuilder::class,
AppModule::class
)
)
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<App>()
}
class App : DaggerApplication() {
override fun onCreate() {
super.onCreate()
Timber.plant(Timber.DebugTree())
}
override fun applicationInjector(): AndroidInjector<out DaggerApplication> = DaggerAppComponent.builder().create(this)
}
最佳答案
@SessionScope
的自定义作用域;SessionActivityBinding
的类:
SessionComponent
的子组件:
@Subcomponent.Builder
并添加一个接收User
对象作为参数的方法;
@BindsInstance
注释这个方法;fun build(): SessionComponent
以允许提供此 SessionComponent
- 这是必要的,以便在用户注销时释放此组件;SessionActivityBinding
类;SessionModule
类来提供@SessionScope
下应该提供的依赖;AppModule
上添加SessionComponent
作为子组件;AppModule
添加到 AppComponent
的模块列表中;SessionComponent
实例,该实例必须保持 Activity 状态直到用户注销;SessionComponent
实例,例如:sessionComponent = null
- 这将丢弃在 @SessionScope
下提供的所有依赖项;可以找到更多详细信息和示例 here ;
关于android - 如何使用 Dagger 2.10 Android Injector 提供与 @SessionScope 和 @ActivityScope 的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45808362/
我在 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
我是一名优秀的程序员,十分优秀!