1

私は短剣を試していて、ObjectGraph をセットアップしようとしています。BaseModuleSharedPreferences や Bus などを格納する を作成しました。WidgetModule画像読み込み用のピカソなどを含むを作成しました。

アダプタ クラスの 1 つに Picasso を挿入しようとしています。アダプター コンストラクターで ObjectGraph インスタンスを取得し、アダプターを挿入します。私は不平を言う実行時例外を受け取ります:

Caused by: java.lang.IllegalArgumentException: No inject registered for members/<ParentClass>$1. You must explicitly add it to the 'injects' option in one of your modules.

私はそのクラスで注射を行っていないので、これは私にとって奇妙です. ParentClassアダプターを作成する場所ですが、注入はアダプター自体で行われます。injectsアノテーションに挿入されていない親クラスを本当に宣言する必要がありますか? これが私のアダプターコンストラクターです:

public MyAdapter(Context context, int textViewResourceId, List<Item> items) {
        super(context, textViewResourceId, items);
        MyApplication.get(getContext()).inject(this); //exception occurs here
}

ここに私のモジュールがあります:

@Module(
        injects = {
                MyApplication.class,
        }
)
public final class BaseModule {
    //...
}

@Module(
        injects = MyAdapter.class
)
public class WidgetModule {
    public WidgetModule(Application app) {
        this.app = app;
    }

    @Provides
    @Singleton
    Picasso providePicasso() {
        return new Picasso.Builder(app)
                .build();
    }
}

ご覧のとおり、アダプター クラスが にinjectsあるのに、なぜ親クラスに言及しているのでしょうか。

また、これは ObjectGraph を作成するための適切な構造ですか? includesとのドキュメントaddsToは非常にまばらで、U2020 のようなすべてのデモ プロジェクトは、実際の意味があいまいです。必要に応じて簡単にオーバーライドできるように、モジュールを分離しようとしています。

編集:両方のモジュールに親クラスを追加しても、例外が発生することがわかりました。これは奇妙です。

4

2 に答える 2