Dagger2 学习(2)

本文介绍如何使用Dagger进行依赖注入,重点讲解如何通过Dagger提供的Context实例化HttpService类,涉及Module和Component的配置及Activity的注入过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续上文

上篇我们基础的使用了Dagger 那么这次扩展下,现在要求来了 HttpService 需要传入一个Context 作为构造函数,而且还想这个Context 还有由Dagger来提供

public class HttpService{
    Context mContext;

    @Inject
    public HttpService(Context context){
        mContext = context;
    }
}

但是这个Context 实际还是由我们来注入,但是我们知道activity就提供context 那么我们可以通过注入activity 到component中

那么这个 component 就需要 扩展出一个module来keep住,并提供出这个activity

@Module
public class ActivityModule {
    Activity mActivity;

    public ActivityModule(Activity activity) {
        mActivity = activity;
    }

    @Provides
    Activity getActivity() {
        return mActivity;
    }

    @Provides
    Context getContext(){
        return mActivity;
    }

}

把Module 加入到Component中

@Component(modules={ServiceModule.class,ActivityModule.class})
public interface ActivityComponent{
    void inject(MainActivity activity);//参数必须是 MainActivity 类型,如果你要其他activity 也必须明确到 那个类,因为在运行时的时候 是通过 反射 来注入的,所以这个需要找这个类下需要注解的东西

    Activity activity();

    Context context();
    //HttpService httpService()//由于HttpService  已经在构造函数中 Inject了这里不用再提供了
}

activity 构建component

public class MineActivity extends Activity{

    @Inject //标致 这个由Dagger 注入
     HttpService mHttpService;

     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupComponent(this)

        ....
        mHttpService.doPost("http://a.com");
        ....

    }   

    void setupComponent(Activity activity){
    DaggerActivityComponent.builder().build().activityModule(new ActivityModule(this)).inject(this);//把当前的activity 丢进Component 让他自动注入给 mHttpService
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值