私が見た限られた例以外で、Dagger 2.0 を使用する方法を理解するのに苦労しています。読み取りアプリケーションの例を見てみましょう。この読書アプリには、ユーザーのストーリーとログイン機能のライブラリがあります。この例の目的で関心のあるクラスは次のとおりです。
MainApplication.java
- アプリケーションを拡張
LibraryManager.java
- ユーザーのライブラリでストーリーの追加/削除を担当するマネージャー。これは、MainApplication
AccountManager.java
- すべてのユーザーのログイン情報を保存する責任がある管理者。LibraryManager から呼び出すことができます。
どのコンポーネントとモジュールを作成する必要があるのか、まだ頭を悩ませています。これまでに収集できるものは次のとおりです。
andインスタンスHelperModule
を提供する を作成します。AccountManager
LibraryManager
@Module
public class HelperModule {
@Provides
@Singleton
AccountManager provideAccountManager() {
return new AccountManager();
}
@Provides
@Singleton
LibraryManager provideLibraryManager() {
return new LibraryManager();
}
}
モジュールのリストにMainApplicationComponent
をリストする を作成します。HelperModule
@Singleton
@Component(modules = {AppModule.class, HelperModule.class})
public interface MainApplicationComponent {
MainApplication injectApplication(MainApplication application);
}
に含め@Injects LibraryManager libraryManager
てMainApplication
、アプリケーションをグラフに挿入します。最後に、注入さLibraryManager
れたライブラリ内のストーリーの数を照会します。
public class MainApplication extends Application {
@Inject LibraryManager libraryManager;
@Override
public void onCreate() {
super.onCreate();
component = DaggerMainApplicationComponent.builder()
.appModule(new AppModule(this))
.helperModule(new HelperModule())
.build();
component.injectApplication(this);
// Now that we have an injected LibraryManager instance, use it
libraryManager.getLibrary();
}
}
に注入AccountManager
するLibraryManager
public class LibraryManager {
@Inject AccountManager accountManager;
public int getNumStoriesInLibrary() {
String username = accountManager.getLoggedInUserName();
...
}
}
ただし、問題は、でAccountManager
使用しようとすると null でありLibraryManager
、問題を解決する理由や方法がわかりません。グラフに注入された が AccountManager を直接使用していないためだと思いますが、どのようにグラフMainApplication
に注入する必要がありLibraryManager
ますか?