You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dagger/Hilt中Assisted Inject绑定接口实现的正确写法及简化方案咨询

方案正确性说明

你当前的实现完全符合Dagger的绑定规则和Assisted Inject的使用规范,是正确可用的实现。你的思路本质是通过接口多态实现工厂返回值的向上转型,以此隐藏实现类ImplClass、只暴露InterfaceA给调用方,逻辑完全通顺。

更精简的实现方案

你现有的方案存在可以省略的样板代码,Dagger的@AssistedFactory原生支持工厂方法直接返回接口类型,只要方法参数和@AssistedInject构造函数中标记了@Assisted的参数类型、数量、顺序完全匹配即可,不需要额外定义两层工厂接口,也不需要单独写Module做绑定,精简后的代码如下:

interface InterfaceA {}

class ImplClass @AssistedInject constructor(@Assisted someClass: SomeClass): InterfaceA {
    @AssistedFactory
    interface Factory {
        fun create(someClass: SomeClass): InterfaceA
    }
}

直接注入ImplClass.Factory调用create方法即可得到InterfaceA类型的实例,原有功能完全一致,省去了额外的子工厂接口定义和Module绑定代码。

补充说明

如果你的业务场景中确实存在需要同时获取InterfaceA类型和ImplClass具体类型实例的需求,也可以直接在同一个@AssistedFactory接口里定义两个方法,不需要做接口继承:

@AssistedFactory
interface Factory {
    fun createAsInterface(someClass: SomeClass): InterfaceA
    fun createAsImpl(someClass: SomeClass): ImplClass
}

Dagger会自动生成两个方法的实现,同样不需要额外绑定。

内容的提问来源于stack exchange,提问作者Ritt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:07