我正在使用Dagger 2.15和Kotlin。我是否需要在每个Activity上添加注入行?是否使用最新版本更新了匕首官方文档?
AndroidInjection.inject(this)
答案 0 :(得分:4)
我是否需要在每个Activity上添加注入行?
否,如果您将活动从DaggerActivity
或DaggerAppCompatActivity
扩展(如果您使用支持库),则不再需要它。
我们可以在源代码中看到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 未更新但是......
从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
}
MainPresenter
由MainModule
@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
和一个名为AndroidInjectionModule
或AndroidSupportInjectionModule
的新匕首模块(如果您使用支持库)。
@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"