2

Dagger を使用する Android アプリがあります。アプリ全体の特定のセクションに、共通のスコープを共有するいくつかのアクティビティ用にスコープ ObjectGraphs を追加したいと考えています。次のモジュールはルート ObjectGraph にあります

@Module(
    injects = {
            MyApplication.class,
    },
    complete = false,
    library = true)
public class BasicContextManagerModule {

    private Context applicationContext;

    public BasicContextManagerModule(Context applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Provides
    Context getApplicationContext() {
        return applicationContext;
    }
}

次に、existingObjectGraph.plus(new FileManagerModule()); を介して次のモジュールを追加しようとします。

@Module(
    injects = {
            MyListActivity.class,
            MyFileDetailActivity.class,
            MyFileInfoActivity.class,
    },
    includes = BasicContextManagerModule.class
)
public class FileManagerModule {

    @Provides
    FileManager provideFileManager(Context context) {
        return new FileManager(context);
    }
}

しかし、結果は

java.lang.UnsupportedOperationException: No no-args constructor com.myapp.core.modules.BasicContextManagerModule$$ModuleAdapter

プラスがこれを許可しない理由を誰かが理解するのを手伝ってくれますか? 私は短剣のドキュメントから読んで、オブジェクトグラフをさらに拡張し、インクルードとaddsToモジュールを持つことができます。しかし、私はこれを達成することができませんでした。

4

1 に答える 1

5

includesモジュールが同じサブグラフに存在することを意味し、インスタンスを渡さない場合、Dagger はそれをインスタンス化します。

addsTo参照されたモジュールがグラフ (実際には親グラフ) にあると予想されますが、Dagger はそれを提供しません。

あなたが欲しいのはですaddsTo

于 2014-08-19T19:43:24.380 に答える