如何在单个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
相关产品推荐
相关产品推荐

