ダガーが生成したコードが実際にはコンパイルされない状況で助けていただければ幸いです。下のグラフのように、サブコンポーネントを使ったかなり精巧な設定があり、Sで終わるコンポーネントはサブコンポーネントです。
A - BS
|
CS-DS
|
ES - FS
すべてのサブコンポーネントがそうのようなビルダーのインタフェースが含まれています。
@Subcomponent(modules = BS_Module.class)
public interface BS {
@Subcomponent.Builder
public interface Builder {
Builder requestModule(BS module);
BS build();
}
}
A用のモジュールでは、私持っている他のコンポーネントへのアクセスを取得するには、次
@Provides
@Singleton
@Inject
public BS provideBS(Provider<BS.Builder> builder) {
return builder.get().build();
}
を
しかし、provideB 'に対して生成されたコードはコンパイルされません。
@Override
public BS provideBS() {
return new BSImpl();
}
しかしBSImplは、ゼロ引数のコンストラクタを持っていないdoest:私は状況がやや明らかにした
private BSImpl(BSBuilder builder) {...}
希望、私はこれを解決取得する方法がわからないとして評価任意のヘルプ。
が私の周りに間違った方法グラフの依存関係を持って
を解決し... Aが直接提供するものBSに依存することはできません、BSは、Aが提供するもののみに依存することができます。
を、あなたが取得しているコンパイルエラーを投稿してくださいことはできますか?また、標準のJavaクラス名を使用すると、ご質問のある読者に役立ちます。 –
@DavidRawsonはあなたの提案に応じてクラス名を修正しました。エラーメッセージは非常に単純です:BSImplクラスのコンストラクタBSImplは与えられた型には適用できません。必須:BSBuilder、found:引数なし、理由:実際の引数と仮引数の長さが異なります。あなたの2番目のコメントあたり@DavidRawson –
@DavidRawson Daggerがプライベート内部クラスとして作成するので、実際にビルダーをインスタンス化することはできません –