【发布时间】:2018-03-15 14:02:31
【问题描述】:
我正在尝试从这篇中等文章中学习 Dagger2 并将 RequestQueue 作为活动级别依赖项传递: https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f 我可以很好地创建应用程序组件,但我在使用 ContributesAndroidInjector 时遇到了很多麻烦。 应用类:
public class PokemonApplication extends Application {
private static AppComponent appComponent;
public static AppComponent getAppComponent(){
return appComponent;
}
@Override
public void onCreate() {
super.onCreate();
appComponent=buildMyComponent();
}
private AppComponent buildMyComponent() {
return DaggerAppComponent.builder().appmod(this).build();
}
}
应用模块:
@Module
public abstract class AppModule {
@ContributesAndroidInjector(modules = VolleyModule.class)
abstract MainActivity mainActivity();
@Provides
@Singleton
static SharedPreferences providePreferences(Application application) {
return application.getSharedPreferences("data", Context.MODE_PRIVATE);
}
@Provides
@Singleton
static Context getContext(Application application){
return application.getApplicationContext();
}
}
应用组件:
@Singleton
@Component(modules = {RetrofitModule.class,AppModule.class})
public interface AppComponent {
void inject(MainActivity mainActivity); //Error here.
@Component.Builder
interface Builder
{
AppComponent build();
@BindsInstance Builder appmod(Application application);
}
}
VolleyModule:
@Module
public abstract class VolleyModule {
@Provides
static RequestQueue getRequestQueue(Context context) {
return Volley.newRequestQueue(context);
}
}
主活动:
@Inject
RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PokemonApplication.getAppComponent().inject(this);
【问题讨论】:
标签: android dependency-injection dagger-2