@PerActivity
@Subcomponent(modules = arrayOf(ApplicationModule::class))
interface ActivityComponent {
fun inject(app: OneAccountApplication)
}
@Singleton
@Component(modules = arrayOf(ApplicationModule::class))
interface ApplicationComponent {
fun inject(syncService: SyncService)
@ApplicationContext fun context(): Context
fun application(): Application
fun ribotsService(): OneAccountService
fun preferencesHelper(): PreferencesHelper
fun databaseHelper(): DatabaseHelper
fun dataManager(): DataManager
}
@ConfigPersistent
@Component(dependencies = arrayOf(ApplicationComponent::class))
interface ConfigPersistentComponent {
fun activityComponent(activityModule: ActivityModule): ActivityComponent
}
@Module
class ActivityModule(private val mActivity: Activity) {
@Provides
internal fun provideActivity() = mActivity
@Provides
@ActivityContext
internal fun providesContext() = mActivity
}
@Module
class ApplicationModule(val mApplication: Application) {
@Provides @Singleton
internal fun provideApplication() = mApplication
@Provides
@ApplicationContext
internal fun provideContext() = mApplication
@Provides
@Singleton
internal fun provideOneAccountService() = OneAccountService.Creator.newOneAccountService()
}
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityContext
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class ApplicationContext
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ConfigPersistent
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class PerActivity
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
dependencies {
final DAGGER_VERSION = '2.8'
def daggerCompiler = "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
annotationProcessor daggerCompiler
testAnnotationProcessor daggerCompiler
androidTestAnnotationProcessor daggerCompiler
compile "com.google.dagger:dagger:$DAGGER_VERSION"
}
kapt {
generateStubs = true
}
基本上,这个IThttps://github.com/ribot/android-boilerplate变成了Kotlin。
Kotlin使用的是kapt
而不是Android插件中的annotationprocessor
。
您需要在build.gradle
文件中包含并使用以下内容:
kapt {
generateStubs = true
}
dependencies {
// ...
kapt daggerCompiler
}
更详细的说明也可以在这里找到:Dagger和Kotlin
:此接口包含此组件所需的所有方法。 现在,问题是,如果我在中执行此调用,则此类不是由Dagger生成的。如果调用相同的行,则由dagger生成de类,不会有任何问题。 我寻找的另一个解决方案是创建一个具有相同结构的其他不同类,并将作为内部对象,结果也是一样。
我已经开始设置匕首2,并面临一个奇怪的问题,看起来像一个bug对我来说。 我有1个主组件和2个子组件,我‘加’在父组件中。我为每个子组件使用不同的。问题是,我可以很容易地为第一个子组件进行字段注入,但我不能为第二个子组件进行相同的注入。注入的字段保持%s。 我正在注射的对象: 这两个对象都具有作用域(作为它们的构造函数字段)。会不会是范围冲突? ---更新--- 我已经检查了由Dagger2生成的
问题内容: 我看到libgdx的1.3.0版本可用,所以我明白了,当我使用项目设置来设置项目时,我检查eclipse的“高级”>“ build”并点击“ generate”,但是当我尝试将其导入eclipse时,它说找不到项目。在1.3.0发行之前,版本1.2.0对我来说是完美的,现在我什至无法获得用于构建eclipse文件的版本。任何修复,我不使用gradle。 问题答案: 新的ADT 23.0
我正在尝试使用Dagger2学习依赖注入。我已经创建了很少的自定义范围和限定符。我已经创建了一个应用程序组件,我想在其中注入某些全局依赖项,我还创建了一个活动组件,它将基于活动上下文返回某些实例。 现在,当我试图在活动中注入全局实例时,我得到了如下错误: ApplicationScope.kt 在注入活动类中使用的ActivityComponent.kt。 用于注入应用程序类的FireBaseCo
null null null 到目前为止,它与示例GitHub几乎相同。当dagger为src/main中的组件构建器生成代码时,它们会正确地生成。但是,Dagger并不为src/test中的组件构建器生成代码。 我的主要建筑。Gradle: 我的应用程序/Build.Gradle null null null 我不知道为什么它会构建到中间层,我假设我需要build.gradle文件来使用而不是,
https://github.com/google/dagger/blob/master/examples/simple/src/main/java/coffee/coffeeapp.java 任何帮助都将不胜感激。