新しいダガー 2 を試しています。実装するのは初めてですが、うまくいきません。私は概念を理解したと思います。ここでの例を理解しています
私の例のために少し変更した同じ構造をコピーしようとしています。
これは、必要なクラスを定義した Graph を拡張する AppComponent です。
@ApplicationScope
@Component(modules = {AppModule.class, DataModule.class})
public interface EFAppComponent extends EFGraph {
/**
* An initializer that creates the graph from an application.
*/
public final static class Initializer {
private Initializer() {
} // No instances.
public static EFAppComponent init(EFApp app) {
return Dagger_EFAppComponent.builder()
.appModule(new AppModule(app))
.build();
}
}
}
public interface EFGraph {
public void inject(EFApp app);
public ImageLoader imageLoader();
public EventBus eventBus();
}
次に、各モジュール内で、対応するクラスを提供しています。ここから、すべてがうまく機能し、Dagger が Dagger_EFAppComponent を正しく構築するように縫い合わせます。
次に、Application クラスで、コンストラクターを使用して初期化します
component = EFAppComponent.Initializer.init(this);
component.inject(this);
次に、私の目標は、アクティビティに ImageLoader と EventBus を挿入することです。そのために、ActivityComponent を作成します。
@ActivityScope
@Component(
dependencies = EFAppComponent.class,
modules = ActivityModule.class
)
public interface ActivityComponent {
public void inject(BaseActivity activity);
}
次に、アクティビティから inject を呼び出します。
activityComponent = Dagger_ActivityComponent.builder()
.eFAppComponent(component)
.activityModule(new ActivityModule(this))
.build();
activityComponent.inject(this);
したがって、inject メソッドの呼び出し後にアクティビティで @Inject EventBus eventBus を宣言したため、注入する必要があります。そうではありません。
したがって、私のアプリと例を段階的にデバッグおよび追跡した後、Dagger_ActivityComponent が正しくビルドされていないことに気付きました。
private final ActivityModule activityModule;
private final EFAppComponent eFAppComponent;
private Dagger_ActivityComponent(Builder builder) {
assert builder != null;
this.activityModule = builder.activityModule;
this.eFAppComponent = builder.eFAppComponent;
initialize();
}
初期化メソッドが空で、プロバイダーが変数として宣言されていません。
何か不足していますか?私は一日中それを機能させようとしてきましたが、成功していません。
助けに感謝します。