Android Dagger 2.15-如何在应用程序类中注入依赖项

Android Dagger 2.15-如何在应用程序类中注入依赖项,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我无法在DaggerApplication类中注入依赖项 有关类别如下: 应用 class App : DaggerApplication() { @Inject lateinit var mSomeClass : SomeClass // This is always NULL override fun applicationInjector(): AndroidInjector<out DaggerApplication> { return DaggerAppComp

我无法在DaggerApplication类中注入依赖项

有关类别如下:

应用

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
}

不确定缺少了什么。

您应该实现HasActivityInjector及其方法。示例如下所示。希望会起作用

class App : Application(), HasActivityInjector {

@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

override fun onCreate() {
    super.onCreate()

    DaggerAppComponent
            .builder()
            .create(this)
            .inject(this)
}

override fun activityInjector(): AndroidInjector<Activity>? {
    return dispatchingAndroidInjector
}
}
类应用程序:应用程序(),HasActivityInjector{ @注入 lateinit var分派AndroidInjector:分派AndroidInjector 重写fun onCreate(){ super.onCreate() 匕首成分 .builder() .创建(此) .注入(这个) } 覆盖有趣的活动Injector():AndroidInjector{ 回程调度和回程调度 } }
我遇到了同样的问题,并且发现在
AppComponent
中使用
DaggerApplication
时,我们不能在
Application
类中调用
inject(this)
。因此,我认为我们不能注射任何东西

因此,在AppComponent中,您必须指定
应用程序
类,而不是键入
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();

    }

}
现在您可以插入
应用程序


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

你有java和kotlin的混合体,请用你正在尝试的语言精确说明
void inject(App)
appComponent.inject(此)
请包括您的组件接口。@EpicPandaForce,您能详细说明一下您的声明吗?非常确定这应该是
接口appComponent:androidjector
非常震惊这项工作。你说的没什么错,你是我眼中的匕首专家。泰姆
class App : Application(), HasActivityInjector {

@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

override fun onCreate() {
    super.onCreate()

    DaggerAppComponent
            .builder()
            .create(this)
            .inject(this)
}

override fun activityInjector(): AndroidInjector<Activity>? {
    return dispatchingAndroidInjector
}
}
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class})
public interface AppComponent extends AndroidInjector<MyApplication> {

    @Component.Builder
    interface Builder {

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

    }

}
    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;
        }
        }