Ism*_*ita 5 android kotlin dagger dagger-2
我将Dagger v2.12与dagger-android-support以下配置一起使用:
@Singleton
@Component(
modules = arrayOf(
AndroidSupportInjectionModule::class,
AndroidBindingModule::class,
AppModule::class
)
)
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<App>()
}
Run Code Online (Sandbox Code Playgroud)
@Module
abstract class AndroidBindingModule {
@PerActivity
@ContributesAndroidInjector(modules = arrayOf(MainModule::class))
internal abstract fun contributeMainActivityInjector(): MainActivity
}
Run Code Online (Sandbox Code Playgroud)
@Module
class MainModule {
...
@Provides @PerActivity
fun providePresenter(rxLifecycle: ReactiveLifecycle, view: MainView) =
MainPresenter(rxLifecycle, view)
}
Run Code Online (Sandbox Code Playgroud)
class MainActivity : BaseActivity() {
@Inject
lateinit var presenter: MainPresenter
...
}
Run Code Online (Sandbox Code Playgroud)
在分析内存转储时,我注意到MainPresenter该类已经创建了两次,其中一个在MainActivity和dagger.internal.DoubleCheck(如预期的那样)1中被引用,但是,第二个实例仅在dagger.internal.DoubleCheck 2中被引用。
为什么会这样呢?这是我的Dagger配置中的错误,预期行为还是某些问题?
问题是,您AndroidInjection.inject(this)在活动课程中执行了2 次。会发生这种情况,因为您的活动是 的后代DaggerAppCompatActivity,而后者也执行AndroidInjection.inject(this)。
从文档的DaggerAppCompatActivity:
一个
AppCompatActivity该注入其成员中onCreate(Bundle),并且可以用于注入Fragments连接到它。
AndroidInjection.inject(this)从您的MainActivity课程中省略line 后,您将在 logcat 中获得预期的输出:
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |