class SlideshowViewModel : ViewModel() {
@Inject lateinit var mediaItemRepository : MediaItemRepository
fun init() {
What goes here?
}
所以我试图学习Dagger2,这样我就可以让我的应用程序更具可测试性。问题是,我已经集成了Kotlin,并且正在开发Android架构组件。我明白建设者注入是可取的,但这是ViewModel
不可能的。相反,我可以使用lateinit
来注入,但我很难弄清楚如何注入。使用Dagger注入ViewModel 2 + Kotlin + ViewModel
我需要为SlideshowViewModel
创建一个Component
,然后注入它吗?或者我使用Application
组件?
gradle这个:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
kapt {
generateStubs = true
}
dependencies {
compile "com.google.dagger:dagger:2.8"
annotationProcessor "com.google.dagger:dagger-compiler:2.8"
provided 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
}
应用程序组件
@ApplicationScope
@Component (modules = PersistenceModule.class)
public interface ApplicationComponent {
void injectBaseApplication(BaseApplication baseApplication);
}
BaseApplication
private static ApplicationComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerApplicationComponent
.builder()
.contextModule(new ContextModule(this))
.build();
component.injectBaseApplication(this);
}
public static ApplicationComponent getComponent() {
return component;
}
“所以我试图学习匕首2,所以我可以让我的应用程序更可测试” - 我会说匕首2对可测试性没有影响,或者它的影响过小。 如果这是唯一的原因,你可能想要传递它。 *作为Dagger的用户发布了很多关于它的教程 – Vasiliy
不是你的问题的答案,但你忘了在你的'build.gradle'文件中应用插件:'kotlin-kapt''。另外,你应该使用'kapt'而不是'annotationProcessor'。 – Benjamin