12

daggerAndroidアプリケーションでDIに使用しています。モジュール外の他のクラスに変数を提供できますが、それらを更新するにはどうすればよいですか?

例:ログイン

User を提供できる AuthenticationModule が必要です。アプリの起動時、ユーザーはログインしていないため、null です。ただし、認証が成功した後、LoginActivity は User の値を設定して、AuthenticationModule を介してアプリの他の部分からアクセスできるようにする必要があります。

注入されたフィールドの値を設定するだけでは、うまくいきません。

それは可能ですか?

4

2 に答える 2

15

私は同様の問題を抱えていて、次のようなものを作りました:

ラッパー:

class LoggedUserProvider {
    private User user;
    User getLoggedUser() {
        return user;
    }
    void setLoggedUser(User user) {
        this.user = user;
    }
}

モジュール:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    @Singleton
    LoggedUserProvider provideLoggedUserProvider() {
        return new LoggedUserProvider();
    }
}

その後、@Inject LoggedUserProvidergetter/setter を使用して、現在ログインしているユーザーを設定できます。

また

ラッパーなしでこれを作成したい場合は、このモジュールを作成する必要があると思います:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    User provideUser() {
        return null;
    }
}

およびこれは承認前にこれを含めないでください:

@Module(overrides = true)
public class CurrentUserModule {
    User currentUser;
    public CurrentUserModule(User currentUser) {
        this.currentUser = currentUser;
    }

    @Provides
    @Singleton
    User provideUser() {
        return currentUser;
    }
}

次に、承認後にこのモジュールを objectGraph に追加し (ログインしたユーザーをコンストラクターに渡します)、グラフ全体を再作成します。
それはただの考えです、私はこのようにしたことはありません。

于 2014-09-03T13:51:55.933 に答える