首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AndroidInjector.Factory?

如何使用AndroidInjector.Factory?
EN

Stack Overflow用户
提问于 2019-08-11 15:24:08
回答 1查看 2.1K关注 0票数 5

我正在从Dagger 2.21迁移,Builder被更改为Factory。如何使用AndroidInjector.Factory?我有这个组件

代码语言:javascript
复制
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呢?

代码语言:javascript
复制
interface AppComponent : AndroidInjector<MainApplication> {

    @Component.Factory
    interface Factory {

        fun create(@BindsInstance instance: MainApplication,
                   @BindsInstance emailId: String) : AppComponent
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 20:41:43

当您有创建组件所需的其他参数时,您不需要(正如您注意到的那样,实际上不能)扩展AndroidInjector.Factory

当您使用匕首- android将依赖项注入到使用AndroidInjector.FactoryAndroidInjection.inject()组件时,您应该扩展AndroidInjection.inject()。为了使这种注入成为可能,您需要遵循一些规则,特别是组件的工厂应该扩展AndroidInjector.Factory

AndroidInjector.Factory定义了AndroidInjector<T> create(@BindsInstance T instance),dagger将使用它实例化这个子组件,因此您不能添加任何额外的参数。

更新

匕首和匕首-android是两个不同的库。Dagger是一个通用的DI框架,它不包含任何特定于android的代码.Component.Factory来自匕首本身,您可以自由地添加具有任意数量参数的方法,这些参数将用于创建您的子组件。

匕首-android是一个特定于android的库,它极大地减少了你需要通过生成它来编写的样板代码。但是您失去了一些灵活性,必须遵循库定义的结构。在这里,工厂方法不能有任何附加参数,工厂应该扩展AndroidInjector.Factory

通常,您也可以将这两种方法混合在一个项目中,但我不建议这样做以使您的代码一致。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57451251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档