【问题标题】:I can't understand how to inject Retrofit object inside my Interactor class我不明白如何在我的 Interactor 类中注入 Retrofit 对象
【发布时间】:2019-01-29 14:03:09
【问题描述】:

我试图阅读一堆文章,但我仍然无法掌握匕首的想法。

我有我想要注入改造实例的指标类。

public class GetForecastInteractorImpl implements MainContract.GetForecastInteractor {

@Inject
Retrofit retrofit;
...
}

没有问题,我可以将它注入到 MainActivity,但这不是我想要的。

有什么想法吗?我不知道代码的哪些部分会有所帮助,所以请告诉我我会提供它们。

【问题讨论】:

    标签: android retrofit dagger android-mvp


    【解决方案1】:

    对于注入,您必须遵循以下程序 让我们以提供改造为例(以 Kotlin 为参考) 1. 创建NetModule(注解@Module)

    要创建 Retrofit,您可能需要提供 OkHttpClient

    @Provides
    @Singleton(because we need only one instance through out the application)
    fun provideOkHttpClient(): OkHttpClient {
    return OkHttpClient().Builder().build() (you can also pass other things while building like Interceptor, timeOut check docs for that)
    }
    

    现在使用相同的格式提供 Retrofit,但要创建 Retrofit,您需要将 OkHttpClient 作为我们在上面提供的参数传递。

    @Provides
        @Singleton
        fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
        return Retrofit.Builder().client(okHttpClient).build()
        }
    

    现在您必须通过提供上面的 NetModule() 来创建带有 @Component 注释的应用程序组件

    编译 Dagger 后会生成你可以用来注入你的类的组件类

    在上述情况下,假设我们创建 AppComponent 的地方有 MainApplication 类, 有一个名为 MainActivity 的活动需要 Retrofit 实例然后 MainActivityComponent 会添加依赖项,说我也需要 AppComponent, 那么您可以继续使用该改造。

    让我知道我是否能够解决您的评论:)

    【讨论】:

      【解决方案2】:

      你的交互器类是可注入的吗?

      你能不能尝试在我们的 impl 类中添加一个空的构造函数来注入:

      @Inject
      public GetForecastInteractorImpl () { }
      

      【讨论】:

      • 我试过这个,但没用。我只是不知道如何解决这个问题。
      • 您是否尝试注入其他依赖项而不是改造?我认为它不起作用,但您可以尝试...您的 impl 类似乎不可注入。您的课程是否附加到任何模块?
      猜你喜欢
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2018-10-20
      • 2019-07-14
      相关资源
      最近更新 更多