小编Mum*_*umi的帖子

为什么不安装 AndroidInjectionModule 仍然有效?

根据关于注入活动对象的 Dagger 文档,它说安装AndroidInjectionModule在您的应用程序组件中。然而,没有它一切都很好。

这是否意味着我不需要申报?在什么情况下会出错?

例如:
注入实例

data class Food(val name: String)
Run Code Online (Sandbox Code Playgroud)

模块

@Module
class FoodModule{
    @Provides
    fun provideFood(): Food {
        return Food("cholocate")
    }
}
Run Code Online (Sandbox Code Playgroud)

绑定模块

@Module
abstract class MainActivityModule {
    @ContributesAndroidInjector(modules = [FoodModule::class])
    abstract fun FoodShop(): MainActivity
}
Run Code Online (Sandbox Code Playgroud)

AppComponent(不安装AndroidInjectionModule)

@Component(modules = [MainActivityModule::class])
interface AppComponent{
    fun inject(app: App)
}
Run Code Online (Sandbox Code Playgroud)

应用程序

class App : Application(), HasActivityInjector {
    @Inject
    lateinit var dispatchingActivityInjector: DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()
        DaggerAppComponent.create().inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> {
        return dispatchingActivityInjector
    }
} …
Run Code Online (Sandbox Code Playgroud)

dagger-2

5
推荐指数
1
解决办法
709
查看次数

匕首@IntoSet 在 kotlin 对象中不起作用?

我在https://google.github.io/dagger/multibindings 中使用了示例

模块 A

@Module
object MyModuleA {
    @Provides
    @IntoSet
    fun provideOneString(): String {
        return "ABC"
    }
}
Run Code Online (Sandbox Code Playgroud)

模块 B

@Module
object MyModuleB {
    @Provides
    @ElementsIntoSet
    fun provideSomeStrings(): Set<String> {
        return HashSet<String>(Arrays.asList("DEF", "GHI"))
    }
}
Run Code Online (Sandbox Code Playgroud)

成分

@Component(modules = [ MyModuleA::class, MyModuleB::class])
interface MyComponent {
    fun strings(): Set<String>
}
Run Code Online (Sandbox Code Playgroud)

测试

@Test
fun testMyComponent() {
    val myComponent = DaggerMyComponent.builder().build()
    println("${myComponent.strings()}")
}
Run Code Online (Sandbox Code Playgroud)

它显示必须设置 MyModuleA 的错误,但将模块从对象更改为类工作正常。

@Module
class MyModuleA {
    @Provides
    @IntoSet
    fun provideOneString(): String {
        return "ABC"
    }
}

@Module
class …
Run Code Online (Sandbox Code Playgroud)

kotlin dagger-2

0
推荐指数
1
解决办法
1428
查看次数

标签 统计

dagger-2 ×2

kotlin ×1