9

Devoxx 2013 での Jake Wharton のトーク、Architecting Android Applications with Dagger では、ログイン ユーザーのみの Dagger スコープの作成について話しました。この種のことは本当にきれいに聞こえるので、アプリケーションでこれを実行したいと考えています。

講演で議論されたコードは、次のようなものでした。

public class LoggedInActivity extends Activity {

    @Inject User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logged_in);

        DaggerScopesApp app = (DaggerScopesApp) getApplication();
        app.getObjectGraph().plus(new UserModule("exampleusername")).inject(this);

        findViewById(R.id.do_something_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(LoggedInActivity.this, user.username + " : " +
                        user.someValue++, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

ただし、注入されたユーザーが @Singleton としてスコープされている場合、そのプロパティは構成の変更時に消えます (オブジェクト グラフは onCreate で作成されるため)。

解決策は非常に簡単です。この「プラス」操作を 1 回行うだけで、新しいオブジェクト グラフを別の場所 (アプリケーション クラスなど) に保存できますが、これが良いアプローチであるかどうか疑問に思っていました。Square の誰かが、アプリケーションで何をしているかについて何か洞察を提供できますか? 「ログイン」グラフにシングルトン オブジェクトがありませんか?

4

1 に答える 1