Toothpick DI をフラグメントで使用しようとすると、奇妙なエラーが発生します。
toothpick.registries.NoFactoryFoundException: クラス android.app.Application のファクトリが見つかりませんでした。クラスに @Inject アノテーション付きコンストラクターがあるか、@Inject アノテーション付きメンバーが含まれていることを確認してください。レジストリを使用している場合は、それらが注釈プロセッサの引数で正しく設定されていることを確認してください。
私のフラグメント:
public class ApplicationMenu extends SidebarFragment {
@Inject ApplicationsService applicationsService;
@Inject SectionsService sectionsService;
private EventBus bus = EventBus.getDefault();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toothpick.inject(this, Toothpick.openScope(LauncherActivity.class)); // <- Erroring here
}
...
}
アクティビティ:
public class LauncherActivity extends SidebarActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
Scope scope = Toothpick.openScopes(LauncherApplication.class, LauncherActivity.class);
scope.bindScopeAnnotation(LauncherActivitySingleton.class);
scope.installModules(new LauncherActivityModule(this));
super.onCreate(savedInstanceState);
Toothpick.inject(this, scope);
setContentView(R.layout.activity_launcher);
ButterKnife.bind(this);
...
}
...
}
奇妙なことに、フラグメントでのみエラーが発生し、他の場所 (ViewRenderers、Adapters、Services など) のすべてのインジェクションは問題なく正常に動作します。