我正在从Dagger 2.21迁移,Builder被更改为Factory。如何使用AndroidInjector.Factory?我有这个组件
interface AppComponent : AndroidInjector<MainApplication> {
@Component.Factory
interface Factory : AndroidInjector.Factory<MainApplication> {
fun create(@BindsInstance emailId: String) : AppComponent
}
}但是它失败了"error:@Component.Factory类型必须有一个精确的抽象方法,已经找到: create(T)“。
AndroidInjector.Factory似乎已经有了一个绑定MainApplication实例的创建。我该如何绑定另一个价值呢?我发现的唯一解决办法是不像这样扩展AndroidInjector.Factory,但是为什么有AndroidInjectory.Factory呢?
interface AppComponent : AndroidInjector<MainApplication> {
@Component.Factory
interface Factory {
fun create(@BindsInstance instance: MainApplication,
@BindsInstance emailId: String) : AppComponent
}
}发布于 2019-08-11 20:41:43
当您有创建组件所需的其他参数时,您不需要(正如您注意到的那样,实际上不能)扩展AndroidInjector.Factory。
当您使用匕首- android将依赖项注入到使用AndroidInjector.Factory的AndroidInjection.inject()组件时,您应该扩展AndroidInjection.inject()。为了使这种注入成为可能,您需要遵循一些规则,特别是组件的工厂应该扩展AndroidInjector.Factory。
AndroidInjector.Factory定义了AndroidInjector<T> create(@BindsInstance T instance),dagger将使用它实例化这个子组件,因此您不能添加任何额外的参数。
更新
匕首和匕首-android是两个不同的库。Dagger是一个通用的DI框架,它不包含任何特定于android的代码.Component.Factory来自匕首本身,您可以自由地添加具有任意数量参数的方法,这些参数将用于创建您的子组件。
匕首-android是一个特定于android的库,它极大地减少了你需要通过生成它来编写的样板代码。但是您失去了一些灵活性,必须遵循库定义的结构。在这里,工厂方法不能有任何附加参数,工厂应该扩展AndroidInjector.Factory。
通常,您也可以将这两种方法混合在一个项目中,但我不建议这样做以使您的代码一致。
https://stackoverflow.com/questions/57451251
复制相似问题