Раньше я следовал шаблону 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);
}
Как видите, мне пришлось создайте путь, чтобы иметь возможность внедрять каждый тип класса, в который мне нужно было внедрить мои зависимости.
К сожалению, в этом случае я не смог успешно их сосуществовать. Есть ли способ, которым я могу сделать оба одновременно?