我无法在DaggerApplication类中注入(inject)依赖

相关类别如下

应用

class App : DaggerApplication() {

@Inject lateinit var mSomeClass : SomeClass // This is always NULL

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


override fun onCreate() {
    super.onCreate()

    mSomeClass.initialize()  // mSomeClass is NULL
}

成分:
 @Singleton
 @Component(modules = [
    AndroidSupportInjectionModule::class,
    AppModule::class,
    ViewModelFactoryModule::class,
    BuildersModule::class
  ])
interface AppComponent : AndroidInjector<DaggerApplication> {

@Component.Builder
interface Builder {

    @BindsInstance
    fun application(application: Application): Builder

    fun build(): AppComponent
    }
}

AppModule类:
    @Module
    class AppModule {

    @Provides
    fun provideSomeClass(context: Context) = SomeClass(context = context)
}

不知道丢失了什么。

最佳答案

我遇到了同样的问题,并发现在inject(this)中使用Application时无法在DaggerApplication类中调用AppComponent。因此,我们无法注入(inject)我认为的任何内容。

因此,在AppComponent中,您必须指定Application类,而不是键入DaggerApplication
您的AppComponent应该像这样

@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class})
public interface AppComponent extends AndroidInjector<MyApplication> {

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);
        AppComponent build();

    }

}

还有你的Application
    public class MyApplication extends DaggerApplication {

        @Inject
        SomeClass mSomeClass;

        @Override
        public void onCreate() {
            super.onCreate();
            mSomeClass.initialize();
        }

        @Override
        protected AndroidInjector<MyApplication> applicationInjector() {
            AppComponent appComponent = DaggerAppComponent.builder().application(this).build();
            appComponent.inject(this);
            return appComponent;
        }
        }

现在您可以注入(inject)Application类。

小提示:如果我说错了,请纠正我,我不是Dagger的专家:)

关于android - Dagger 2.15-如何在Application类中注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50588395/

10-12 02:40