Инъекция Dagger2 в класс Presenter MVP - PullRequest
0 голосов
/ 27 апреля 2020

Раньше я следовал шаблону MVP go, и, поскольку я модернизировал старое мое приложение, чтобы использовать dagger 2 и MVVM, я сейчас нахожусь в состоянии, когда MVVM оптимизирован для этого нового шаблона инъекции. в то время как старое приложение имеет плохую практику внедрения.

Я пытаюсь сохранить какой-то устаревший код, который находится на уровне презентатора, пока я полностью не обновлюсь. К сожалению, я был @Injecting большим количеством @Singleton объектов в этих классах презентаторов.

Например:

public class MyPresenter {
     @Inject
     MyApp mApplication; //Application Class

     @Inject
     RestClient mRestClient;

     public MyPresenter() {
          MyApp.getAppComponent(MyApp.app()).inject(this);
     }
}

Это работает. Я могу получить доступ к объектам таким образом, но я отхожу от этого, но я пытаюсь заставить его работать. Я создал новый класс AppComponent, который работает для всех моих изменений MVVM, но мне нужна помощь, чтобы выяснить, как заставить их сосуществовать в то же время, поскольку существует около 100 классов докладчиков.

Вот мой новый AppComponent:

@Component(
        modules = [
            AndroidInjectionModule::class,
            AppModule::class,
            ActivityBuilder::class,
            ViewModelModule::class])
interface IAppComponent {
    @Component.Builder
    interface Builder {
        fun build(): IAppComponent

        @BindsInstance
        fun application(application: Application): Builder
    }

    fun inject(myApp: MyApp)
}

Вот мой старый AppComponent, который позволял работать вышеперечисленным инъекциям докладчика:

@Singleton
@Component(modules = {AndroidInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent {
    void inject(MyApp app);

    void inject(BaseActivity activity);

    void inject(MyService1 service);

    void inject(MyService2 service);

    void inject(APIService api);

    void inject(Fragment1 fragment);

    void inject(Fragment2 fragment);

    void inject(Fragment3 fragment);

    void inject(Fragment4 fragment);

    void inject(Fragment5 fragment);

    void inject(UserUpdateService service);

    void inject(MyActivity activity);

    void inject(MySecondActivity activity);

    void inject(MyThirdActivity activity);

    void inject(MyPresenter myPresenter);

    void inject(MySecondPresenter mySecondPresenter);

    void inject(MyThirdPresenter myThirdPresenter);
}

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

К сожалению, в этом случае я не смог успешно их сосуществовать. Есть ли способ, которым я могу сделать оба одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...