如何将AppCompatActivity传递给模块?

时间:2018-11-19 07:39:18

标签: dagger-2 dagger

我在项目中使用Dagger 2。我在项目中有几个模块。 我有一个BaseActivityModule连接到每个Activity模块。 如何在BaseActivityModule中获取AppCompatActivity。

编译项目时,出现此错误

  错误:[Dagger / MissingBinding] [dagger.android.AndroidInjector.inject(T)]如果没有@Inject构造函数或@Provides注释的方法,则无法提供android.app.AlertDialog。   公共抽象接口AppComponent {                   ^         android.app.AlertDialog被注入             com.example.laptop.daggerexample.ui.main.view.MainActivity.alertDialog         com.example.laptop.daggerexample.ui.main.view.MainActivity在以下位置注入             dagger.android.AndroidInjector.inject(T)     组件路径:com.example.laptop.daggerexample.di.component.AppComponent? com.example.laptop.daggerexample.di.builder.ActivityBuilder_BindMainActivity.MainActivitySubcomponent

项目中以下模块的示例

ActivityBuilder

@Module
     abstract class ActivityBuilder {
     @ContributesAndroidInjector(modules = [(MainActivityModule::class)])
     abstract fun bindMainActivity(): MainActivity
}

AppModule

@Module
abstract class AppModule{
     @Provides
     @Singleton
     fun provideContext(application: Application): Context = application
}

BaseActivityModule

@Module
class BaseActivityModule {
     @Provides
     fun provideAlertDialog(activity: AppCompatActivity)= 
     AlertDialog.Builder(activity).create()
}

MainActivityModule

@Module(includes = [(BaseActivityModule::class)])
class MainActivityModule {
     @Provides
     fun provideMainMVPView(activity: MainActivity): MainMVPView = activity

     @Provides
     fun provideMainMVPPresenter(presenter: MainPresenter<MainMVPView>): 
     MainMVPPresenter<MainMVPView> = presenter
}

0 个答案:

没有答案