Dagger 2 на Android: внедрить ту же зависимость в Activity и сохранить фрагмент

У меня есть объекты классовF1 а такжеF2 что я хочу добавить в сохраненный фрагмент. У меня также есть объект классаA это зависит от действия, и я хочу, чтобы оно было внедрено в это действие и в сохраненный фрагмент, присоединенный к диспетчеру фрагментов этого действия. Я пишу следующий код. Во-первых, модуль для зависимости Activity:

@Module
public class MainActivityModule {
    private Activity mActivity;

    public MainActivityModule(Activity activity) {
        mActivity = activity;
    }

    @Provides
    @ActivityScope
    public A provideA() {
        return new A(mActivity);
    }
}

Затем соответствующий компонент, который должен сделатьA Объект доступен для его зависимых компонентов:

@ActivityScope
@Component(modules = {MainActivityModule.class})
public interface MainActivityComponent {
    void inject(MainActivity activity);

    // make the A object available to dependent components
    A getA();
}

Я также пишу модуль, связанный с фрагментами:

@Module
public class FragmentModule {
    @Provides
    @FragmentScope
    public F1 provideF1() {
        return new F1();
    }

    @Provides
    @FragmentScope
    public F2 provideF2() {
        return new F2();
    }
}

и соответствующий ему компонент:

@FragmentScope
@Component(modules = {FragmentModule.class}, dependencies = {MainActivityComponent.class})
public interface FragmentComponent {
    void inject(MyFragment presenter);
}

Наконец, я добавляю зависимость отA в Деятельности, где мне также нужно вызвать определенные методы жизненного цикла для него. Activity также предоставляет метод для получения компонента, чтобы Fragment мог использовать его при создании собственного компонента:

// in MainActivity.onCreate
mActivityComponent = DaggerMainActivityComponent.builder()
        .mainActivityModule(new MainActivityModule(this))
        .build();
mActivityComponent.inject(this);
mA.onCreate();

и я пытаюсь ввести зависимости наA, F1, F2 во фрагменте тоже:

// in MyFragment.onCreate
FragmentComponent component = DaggerFragmentComponent.builder()
        .fragmentModule(new FragmentModule())
        .mainActivityComponent(((MainActivity) getActivity()).getComponent())
        .build();
component.inject(this);

Однако, поскольку Фрагмент сохраняется, когда Операция уничтожается и воссоздается системой, реагирующей на изменение конфигурации (например, ротация устройства), Фрагмент сохраняет ссылку на старыйA экземпляр, в то время как новый Activity правильно воссоздал новыйA экземпляр, чтобы пойти с этим. Чтобы обойти эту проблему, я должен создатьFragmentComponent и вводить зависимости вMyFragment.onActivityCreated скорее, чемMyFragment.onCreate, С другой стороны, это подразумевает, чтоF1 а такжеF2 зависимости воссоздаются каждый раз, когда действие уничтожается и воссоздается; но они являются зависимыми от фрагмента зависимостями, поэтому они должны следовать жизненному циклу фрагмента вместо действия.

Поэтому мой вопрос заключается в следующем: возможно ли вводить зависимости разной области в сохраненный фрагмент? В идеале,F1 а такжеF2 зависимости должны быть введены вMyFragment.onCreate, в то время какA зависимость должна быть введена вMyFragment.onActivityCreated, Я пытался использовать два разных компонента, но, кажется, невозможно выполнить частичный впрыск. В настоящее время я добавил явное переназначение фрагмента.A зависимость вMyFragment.onActivityCreatedно это не совсем инъекция, вы знаете. Можно ли сделать это лучше?

Ответы на вопрос(1)

Ваш ответ на вопрос