Android _ 从 Dagger2 到 Hilt 玩转依赖注入(一)

本文详细介绍了Android中从Dagger2迁移到Hilt的依赖注入实践,包括字段注入、构造器注入、@Singleton和自定义作用域、@Module与@Provides方法、@Subcomponent以及如何进行单元测试。讲解了Dagger2生成的组件和子组件的生命周期,以及如何在组件之间管理和注入依赖。文章最后提到了不同级别的依赖注入模拟在单元测试中的应用。
摘要由CSDN通过智能技术生成

public class UserRemoveDataSource {
@Inject
public UserRemoveDataSource() {
}
}

你需要用 @Inject 注解修饰依赖项的构造方法,同时,它的依赖项 UserLocalDataSource 和 UserRemoteDataSource 也需要增加 @Inject 注解。

以上代码在构建后会自动生成代码:

DaggerApplicationComponent.java

1、实现 ApplicationComponent 接口
public final class DaggerApplicationComponent implements ApplicationComponent {
private DaggerApplicationComponent() {
}

2、创建依赖项实例
@Override
public UserRepository userRepository() {
return new UserRepository(new UserLocalDataSource(), new UserRemoteDataSource());
}

3、构建者模式
public static Builder builder() {
return new Builder();
}

public static ApplicationComponent create() {
return new Builder().build();
}

public static final class Builder {
private Builder() {
}

public ApplicationComponent build() {
return new DaggerApplicationComponent();
}
}
}

可以看到,最简单的依赖注入模板代码已经自动生成了。使用时,你只需要通过 ApplicationComponent 这个入口就可以获得 UserReopsitory 实例:

ApplicationComponent component = DaggerApplicationComponent.create();

UserRepository userRepository = component.userRepository();

3.2 @Inject 字段注入

有些类不是使用构造器初始化的,例如 Android 框架类 Activity 和 Fragment 由系统实例化,此时就不能再使用 3.1 节 中使用的构造器注入,可以改为字段注入,并手动调用方法请求注入。

构造器注入:(X)
public class MyActivity {
@Inject
public MyActivity(LoginViewModel viewModel){

}
}

字段注入:
class MainActivity : AppCompatActivity() {
@Inject
lateinit var viewModel: LoginViewModel

override fun onCreate(savedInstanceState: Bundle?) {
DaggerApplicationComponent.create().inject001(this)
super.onCreate(savedInstanceState)

}
}
public class LoginViewModel {
private final UserRepository userRepository;

@Inject
public LoginViewModel(UserRepository userRepository) {
this.userRepository = userRepository;
}
}

在 Activity 或 Fragment 中使用时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值