我很久以前就遵循MVP模式,并且当我升级我的旧应用程序以使用Dagger 2和MVVM时,我现在处于泡菜状态,其中MVVM针对此新的注入模式进行了优化。应用程序的注入行为不良。
在尝试全面改进之前,我试图同时保留一些在presenter层中的遗留代码。不幸的是,在这些presenter类中,我@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);
}
如您所见,我必须创建一个路径,以能够注入将依赖项注入所需的每种类型的类。
不幸的是,对于这种情况,我无法成功地使它们并存。我可以同时进行两种操作吗?