Невозможно использовать Toothpick.inject во фрагменте - PullRequest
0 голосов
/ 05 мая 2018

При попытке использовать DI Toothpick во фрагменте появляется странная ошибка:

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, Адаптеры, Сервисы и т. Д.) Работают без проблем

1 Ответ

0 голосов
/ 17 мая 2018

Я понял это. Я по ошибке закрываю область приложения в одном из моих сервисов. Этот сервис использовал во фрагментах, что приводит к ошибке.

К сожалению, сообщение об ошибке не предоставляет никакой полезной информации, и единственный способ найти проблему - это проанализировать и отладить весь код.

Поэтому, используя зубочистку, вы должны быть очень осторожны с жизненным циклом прицела.

...