【问题标题】:Dagger2 Architecture failed with .Application does not implement dagger.android.HasAndroidInjectorDagger2 架构失败,.Application 未实现 dagger.android.HasAndroidInjector
【发布时间】:2020-10-31 09:15:50
【问题描述】:

我正在学习 Dagger2,我正在尝试构建一个非常愚蠢的示例(Mainactivity 必须实例化一个 Car 类)。

我必须处理这个错误。应用程序没有实现 dagger.android.HasAndroidInjector

如果我理解正确的话:

  1. 我的组件需要被注解@Component并且必须引用我的模块@Module(带有一些注解的方法@Provides)李>
  2. 我必须使用 lateinit var 来实例化我的类并使用注解 @Inject。

我哪里失败了?

我的主要活动:

class MainActivity : DaggerAppCompatActivity() {

    @Inject
    lateinit var car: Car

    public var brand: String = "Peugeot"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        DaggerAppComponent.builder().application(application).buildAppComponent()
        car.name = brand


        Log.e("CarText", "onCreate: ${car.name}")
    }

我的应用组件

@Component(
    modules = arrayOf(AppModule::class)
)
public interface AppComponent : AndroidInjector<AppComponent>{

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(application: Application): Builder

        fun buildAppComponent(): AppComponent
    }

我的应用模块

@Module
class AppModule {

    companion object{
        @Provides
        fun createCar(): Car {
            return Car("")
        }
    }


}

完成我的汽车课

data class Car(var name: String)

【问题讨论】:

  • 实际上,我错过了两件事。第一个是我的 AppComponent 中的 AndroidSupportInjectionModule::class,最后一个是我的 AppModule 中带有 @ContributesAndroidInjector 注释的抽象方法

标签: android kotlin dependency-injection dagger-2


【解决方案1】:

解决办法已经找到了。

  1. 我错过了我的 AppComponent 中的 AndroidSupportInjectionModule::Class
  2. 我想在我的 APP 模块中创建一个带有注释 @ContributesAndroidInjector 的抽象方法

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2015-09-05
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多