【问题标题】:Dagger is not generating DaggerAppComponent class for AppComponentDagger 没有为 AppComponent 生成 DaggerAppComponent 类
【发布时间】:2019-12-18 06:54:01
【问题描述】:

我的“BaseServiceModule”是:

@Module
public class BaseServiceModule {

private static final int TIMEOUT = 40;
private static final int READ_TIMEOUT = 40;
private static final int WRITE_TIMEOUT = 40;

private String url = ServerData.getInstance().getServerUrl();


@Provides
String provideURL(){
    return url;
}

@Provides
Gson provideGson(){
    return new GsonBuilder().setLenient().create();
}

// Get BASE URL.
@Provides
public  Retrofit.Builder provideRetrofitBuilder(OkHttpClient okHttpClient) {
       return new Retrofit.Builder().baseUrl(ServerData.getInstance().getServerUrl()).client(okHttpClient);
}


// for custom URL, GSON
@Provides
public  Retrofit getCustomUrlInstance_Gson(Retrofit.Builder retrofitBuilder) {
    return retrofitBuilder.build();
}


@Provides
public  Retrofit.Builder getBuilderGson(Retrofit.Builder builder, GsonConverterFactory gsonConverterFactory) {
    return builder.addConverterFactory(gsonConverterFactory);
}

// GSON Converter Factory
@Provides
public GsonConverterFactory provideGsonConverterFactory( Gson gson){
    return GsonConverterFactory.create(gson);
}


@Provides
public OkHttpClient provideOkHttpClient() {
    return new OkHttpClient.Builder()
            .connectTimeout(TIMEOUT, TimeUnit.SECONDS)
            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
            .build();
}

}

我的服务模块是:

@Module
public class ServiceModule {

  @Provides
  GlobalApiInterface provideGlobalApiInterfaceGson(Retrofit retrofit){
     return retrofit.create(GlobalApiInterface.class);
 }
}

我的 ActivityComponent 是:

@Component(dependencies = AppComponent.class, modules = ServiceModule.class)
public interface ActivityComponent {
    void inject(SchoolCodeActivity schoolCodeActivity);
}

我的 AppComponent 是:

@Component(modules = BaseServiceModule.class)
public interface AppComponent {
  Retrofit getRetrofitInstance();
  Retrofit.Builder getRetrofitBuilder();
 }

我的应用程序类是:

 public class MainApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
     AppComponent component = // not making "DaggerAppComponent" final class

  }   
}

Dagger 版本使用:

annotationProcessor "com.google.dagger:dagger-compiler:2.24"
implementation 'com.google.dagger:dagger-android-support:2.16'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'

我浏览了其他重复的问题以寻求解决方案,但找不到相关的解决方案。 我是 Dagger 的新手,我正在尝试在应用程序级别创建 Retrofit 实例,并在活动级别创建与 Retrofit 相关的接口。 “GlobalApiInterface”是改造的接口,“ServiceModule”是改造中设置接口的模块。

请帮助我解决我犯错的地方。

【问题讨论】:

  • Build 窗口中是否有任何错误消息?
  • @BartekLipinski- 不,事实上我能够创建“DaggerActivityComponent”。

标签: android android-studio dependency-injection dagger-2 dagger


【解决方案1】:

在实施 dagger 后,您需要至少构建并运行一次项目。会自动生成DaggerAppComponent

你能试试这个依赖吗:

implementation 'com.google.dagger:dagger:2.25.3'
annotationProcessor 'com.google.dagger:dagger-compiler:2.25.3'

在 gradle 同步成功后使缓存无效并重新启动。然后运行您的项目。

【讨论】:

  • 不,不工作。 dagger 是否有可能无法为那些不在任何地方使用的组件创建类?
  • 我认为你也应该使用范围。这可能会解决您的问题。
  • @MrCode - 你的两个答案都是正确的。主要是,我缺少范围界定,这就是 DaggerAppComponent 没有生成的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多