我正在使用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;
}
}
请帮忙,谢谢你。
答案 0 :(得分:1)
我遇到了同样的问题,你需要做的只是为需要由ApplicationComponent接口中的ApplicationComponent注入的依赖项添加一个getter方法。
例如,如果您需要Retrofit,例如在您的情况下,您通常在ApplicationModule中定义@Provides方法并添加
Retrofit getRetrofit();
ApplicationComponent中的。
我希望有帮助