Android-Dagger2 - 无法从Application组件获取依赖关系到Activity Scope

时间:2018-05-08 19:40:26

标签: android dagger-2 dagger

我正在使用Dagger 2进行依赖注入,如果注入在同一范围内,一切正常工作,例如:如果ApplicationComponent在Application Scope中注入实例,或者ActivityComponent在Activity中注入了一些实例范围,一切都很好。当我尝试使ActivityComponent依赖于ApplicationComponent并尝试从那里获取应用程序根本不构建的依赖项时,问题就发生了,我得到3个编译器错误  1.找不到符号类DaggerActivityComponent  2.找不到符号类DaggerApplicationCom  3.无法访问Nullable。 我到处搜索过这个,但似乎没有什么能解决问题。

这是ApplicationComponent:

@ApplicationScope
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
}

这是ActivityComponent:

@ActivityScope
@Component(modules = {ActivityModule.class}, dependencies =   ApplicationComponent.class)
public interface ActivityComponent {

void inject(MainActivity activity);
}

这是ApplicationModule:

@Module

公共类ApplicationModule {

@Provides
public Retrofit retrofit(GsonConverterFactory gsonConverterFactory) {
    return new Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(gsonConverterFactory)
            .build();
}

@Provides
public Gson gson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    return gsonBuilder.create();
}


@Provides
public GsonConverterFactory gsonConverterFactory(Gson gson) {
    return GsonConverterFactory.create(gson);
}
}

这是ActivityModule

@Module
public class ActivityModule {

}

这是应用程序类

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}

最后活动:

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}

请帮忙,谢谢你。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,你需要做的只是为需要由ApplicationComponent接口中的ApplicationComponent注入的依赖项添加一个getter方法。

例如,如果您需要Retrofit,例如在您的情况下,您通常在ApplicationModule中定义@Provides方法并添加

Retrofit getRetrofit();
ApplicationComponent中的

我希望有帮助