我在 Kotlin 中使用 Dagger 2.15。我是否需要在每个 Activity 上添加注入(inject)行? dagger 官方文档是否更新为使用最新版本?
AndroidInjection.inject(this)
最佳答案
Should I need to add inject line on every Activity?
不,如果您从DaggerActivity
或DaggerAppCompatActivity
扩展您的 Activity ,则不再需要它(如果您使用支持库).
DaggerActivity正如我们在源代码中看到的那样,已经在调用 AndroidInjection.inject(this)
:
public abstract class DaggerActivity extends Activity implements HasFragmentInjector {
//...
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
}
//...
}
Is it dagger official document updated for using latest version?
在今天的日期, Dagger documentation Android 版未更新但...
我用 Kotlin 编写了一个示例,说明如何在 Dagger 2.15 中连接所有内容:
应用类扩展自 DaggerApplication
class App : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
注入(inject) MainPresenter
的简单 Activity
class MainActivity : DaggerActivity() {
@Inject lateinit var mPresenter: MainPresenter
//... and the mPresenter is available without anything else
}
MainPresenter
由 MainModule
提供
@Module
class MainModule {
@Provides
fun provideMainPresenter(context: Context): MainPresenter {
return MainPresenterImpl(context)
}
}
BuildersModule
是绑定(bind) MainActivity
和其他“子组件”所必需的
@Module
abstract class BuildersModule {
@ContributesAndroidInjector(modules = [MainModule::class])
abstract fun bindMainActivity(): MainActivity
}
AppComponent
现在包括我们的 BuildersModule
和一个名为 AndroidInjectionModule
或 AndroidSupportInjectionModule
的新 Dagger 模块(如果您使用支持库)。
@Singleton
@Component(modules = [
AndroidInjectionModule::class,
BuildersModule::class
])
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
}
请注意,我们不再在此接口(interface)中定义所有 inject() 函数。
Gradle 依赖项:
// dagger
implementation "com.google.dagger:dagger:2.15"
kapt "com.google.dagger:dagger-compiler:2.15"
// dagger android
implementation "com.google.dagger:dagger-android:2.15"
implementation 'com.google.dagger:dagger-android-support:2.15' // if you use the support libraries
kapt "com.google.dagger:dagger-android-processor:2.15"
关于android - 在 Dagger 2.15 中,我是否需要在每个 Activity 上添加注入(inject)行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348638/