在Dagger 2.15中,我是否需要在每个Activity上添加注入行?

时间:2018-03-18 13:53:20

标签: android dagger-2 dagger

我正在使用Dagger 2.15和Kotlin。我是否需要在每个Activity上添加注入行?是否使用最新版本更新了匕首官方文档?

AndroidInjection.inject(this)

1 个答案:

答案 0 :(得分:4)

  

我是否需要在每个Activity上添加注入行?

,如果您将活动从DaggerActivityDaggerAppCompatActivity扩展(如果您使用支持库),则不再需要它。

我们可以在源代码中看到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);
    }
    //...
}
  

是否使用最新版本更新了匕首官方文档?

在今天的日期,Android的匕首documentation 更新但是......

我在Kotlin写了一个例子,你可以在Dagger 2.15中连接所有内容:

DaggerApplication

延伸的应用程序类
class App : DaggerApplication() {

    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().application(this).build()
    }
}

注入MainPresenter

的简单活动
class MainActivity : DaggerActivity() {

    @Inject lateinit var mPresenter: MainPresenter

    //... and the mPresenter is available without anything else
}

MainPresenterMainModule

提供
@Module
class MainModule {

    @Provides
    fun provideMainPresenter(context: Context): MainPresenter {
        return MainPresenterImpl(context)
    }
}

绑定BuildersModule和其他&#34;子组件需要MainActivity&#34;

@Module
abstract class BuildersModule {

    @ContributesAndroidInjector(modules = [MainModule::class])
    abstract fun bindMainActivity(): MainActivity
}

AppComponent现在包含我们的BuildersModule和一个名为AndroidInjectionModuleAndroidSupportInjectionModule的新匕首模块(如果您使用支持库)。

@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    BuildersModule::class
])
interface AppComponent : AndroidInjector<DaggerApplication> {

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(application: Application): Builder

        fun build(): AppComponent
    }
}

请注意,我们不再在此接口中定义所有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"