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

如何在单个Hilt Module类中配置ActivityComponent与SingletonComponent绑定

在Hilt Module中为不同组件配置不同绑定关系的实现方法

你需要在同一个Hilt Module类中,分别为ActivityComponent和SingletonComponent配置不同的@Binds绑定,对应Activity生命周期和Application生命周期的作用域,核心是让两个绑定分别归属到不同的组件作用域,同时通过限定符区分同一个接口的不同实现。

实现步骤与代码示例

要达成这个需求,关键是给每个@Binds方法添加对应的作用域注解,配合@InstallIn同时指定多个组件,再通过限定符注解区分同一个接口的不同实现:

@Module
@InstallIn({ActivityComponent.class, SingletonComponent.class})
public abstract class MyHiltModule {

    // 归属Activity生命周期作用域的绑定
    @Binds
    @ActivityScoped
    @SomeQualifier
    abstract SomeInterface bindSomething(SomeImpl someImpl);

    // 归属Application生命周期作用域的绑定
    @Binds
    @Singleton
    @AnotherQualifier
    abstract SomeInterface bindAnotherThing(AnotherImpl anotherImpl);
}

关键说明

  • @ActivityScoped:标记该绑定的实例跟随Activity的生命周期创建和销毁,仅在ActivityComponent生效
  • @Singleton:标记该绑定的实例全局唯一,跟随Application生命周期,仅在SingletonComponent生效
  • 注入时需通过对应限定符获取指定实现,示例如下:
    // 在Activity中注入Activity作用域的实例
    @Inject
    public MyActivity(@SomeQualifier SomeInterface activityScopedInstance) {
        // 使用Activity作用域的实例
    }
    
    // 在全局类中注入Application作用域的实例
    @Inject
    public MyRepository(@AnotherQualifier SomeInterface singletonInstance) {
        // 使用Application作用域的实例
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:44:50