首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dagger 2.15 -如何在应用程序类中注入依赖项

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

Stack Overflow用户
提问于 2018-05-29 23:52:15
回答 2查看 5.4K关注 0票数 12

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

相关的类如下

应用程序

代码语言:javascript
复制
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
}

组件:

代码语言:javascript
复制
 @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类:

代码语言:javascript
复制
    @Module
    class AppModule {

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

不确定缺少了什么。

EN

回答 2

Stack Overflow用户

发布于 2018-08-17 00:42:25

我也遇到过同样的问题,当我们在Application中使用DaggerApplication时,我们不能在AppComponent类中调用inject(this)。正因为如此,我想我们不能注入任何东西。

因此,在AppComponent中,您必须指定Application类,而不是键入DaggerApplication

您的AppComponent应该是这样的

代码语言:javascript
复制
@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

代码语言:javascript
复制
    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;
        }
        }

现在您可以在Application类中注入。

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

票数 18
EN

Stack Overflow用户

发布于 2018-08-16 14:27:19

您应该实现HasActivityInjector及其方法。示例如下所示。希望能行得通。

代码语言:javascript
复制
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
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50588395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档