xiaobailong24 / MVVMArms

Android MVVM Architecture Components based on MVPArms and Android Architecture Components.
Apache License 2.0
424 stars 64 forks source link

这个怎么编译通过的 #13

Closed lijianyu closed 6 years ago

lijianyu commented 6 years ago

image 在编译过程中出现问题 image 如果吧把inject(App app) -> inject(Application app),编译通过,但是activityInjector返回为 null。只有把@AppScope改成@Singleton,然后同时用inject(App app) 才能运行成功,请问这是为什么呢?

xiaobailong24 commented 6 years ago

@lijianyu inject(App app),这个 App 就是目标类,不能是父类。 @Singleton 保证Component和Module是匹配的,若Component和Module的Scope是不一样的,则在编译时报错。而且 @Singleton 是顶级的 Scope

lijianyu commented 6 years ago

@lijianyu inject(App app),这个 App 就是目标类,不能是父类。 @singleton 保证Component和Module是匹配的,若Component和Module的Scope是不一样的,则在编译时报错。而且 @singleton 是顶级的 Scope

app 就是目标类。 appComponent 对应的 module 都是类似这个,没有@singleton,@singleton参照你的都放在beeComponent 中和对应的 module 中 image

xiaobailong24 commented 6 years ago

@lijianyu 你的 AppComponent 是 @AppScope 注解,而 ActivityModule 中的方法是 @ActivityScope 注解。

https://github.com/xiaobailong24/MVVMArms/blob/master/weather/src/main/java/me/xiaobailong24/mvvmarms/weather/di/component/AppComponent.java https://github.com/xiaobailong24/MVVMArms/blob/master/weather/src/main/java/me/xiaobailong24/mvvmarms/weather/di/module/AppModule.java

lijianyu commented 6 years ago

@lijianyu 你的 AppComponent 是 @AppScope 注解,而 ActivityModule 中的方法是 @ActivityScope 注解。

如果 module 不加 scope 我试过了貌似也不行,你的WeatherNowFragmentModule这个在哪里注入的,我看 module 是 fragmentScope的注解。

xiaobailong24 commented 6 years ago

@lijianyu 看下源码注释 https://github.com/xiaobailong24/MVVMArms/blob/master/weather/src/main/java/me/xiaobailong24/mvvmarms/weather/di/module/WeatherNowFragmentModule.java

和这篇文章 https://www.jianshu.com/p/6d3b1805f5e5