私はMyApplication
私はさまざまな場所で使用するように私のアプリケーションクラスを注入するためにDagger 2
を使用しようとしています。これはDagger 2.11
ダガー2 - アプリケーションクラスを提供
MyApplication.java
public class MyApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
AppInjector.init(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
を使用して、私の設定ですAppInjector.java
public class AppInjector {
public static void init(MyApplication application){
//Initialize dagger and inject the application
DaggerAppComponent.builder().application(application).build().inject(application);
application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle aBundle) {
handleActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle aBundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
private static void handleActivity(Activity activity){
if(activity instanceof HasSupportFragmentInjector){
AndroidInjection.inject(activity);
}
if (activity instanceof FragmentActivity){
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(
new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f,
Bundle savedInstanceState) {
if (f instanceof Injectable) {
Log.i("LifecycleCallbacks", "injected:" + f);
AndroidSupportInjection.inject(f);
}
}
}, true);
}
}
AppComponent.java
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
ActivityBuilder.class,
AppModule.class
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance Builder application(Application application);
AppComponent build();
}
void inject(MyApplication application);
}
しかし、私はコンストラクタで@Inject MyApplication application
を使用しようとするたびに、短剣はエラーが、それは私がアプリケーションをどこにでも使用されなければならない確認していない、より多くの@Provides
Furthureせずにそれを提供する方法がないことをスローします、その代わりにContext
?もしそうなら、私はContext
をどのように提供するのですか?
@Component.Builder
interface Builder {
--> @BindsInstance Builder application(Application application);
AppComponent build();
}
すべてのダガーについてのごApplication
であることを知っている
https://github.com/iammert/dagger-android-injection/tree/master – eurosecom