3

注入したいクラスがいくつかあります。たとえば、エンドポイントから JSON をダウンロードしてデータベースに保存するために使用するAPIContentLoaderクラスがあります。データベースへの読み書き用に作成したDatabaseManagerクラスをAPIContentLoaderに注入したいと思います。DatabaseManagerをこのクラスに注入するには、最初にApplicationContextへの参照が必要ですよね?

これが私が今セットアップしている方法です:

public class APIContentLoader{
    @Inject DatabaseManager dbm;
    @Inject BaseApplication app;

    public APIContentLoader(){
        app.getAppComponent().inject(this);
        // dbm now is ready for use
    }  
    ... // rest of class stuff
}

私のBaseApplicationクラスは、標準の Application クラスを拡張します。この方法でこのクラスへのBaseApplication参照を挿入することは悪い習慣ですか? ApplicationContext への静的参照を作成することは、これらの非アクティビティ クラスで使用できるようにするための良い方法ではないことはわかっています。

大きな問題は、このアプローチは、静的参照と同じ問題を、メモリ管理やこれらのヘルパー クラスの存続期間の永続化と同じように提示するかどうかということだと思います。

4

1 に答える 1

6

これは、あなたのクラスが実際に何であるかについての私の質問で私が得ているものです:

Android コンポーネント (アクティビティ、サービスなど) は、フレームワークがそれらのインスタンスを作成できるように引数なしのコンストラクターを必要とするため、依存性注入の恩恵を受けます。Android フレームワークによってインスタンス化されていないクラスは、その依存関係をコンストラクターの引数として単純に受け取る必要があります。@Injectそのようなクラスにフィールドを持つ理由はありません。

于 2016-10-04T05:59:26.967 に答える