Dagger2 使用总结(三)
之前两篇主要针对Dagger2的基础库进行了简单的总结,本篇会重点讲述Dagger2的Android支持库,它对Android组件进行了定制,使代码更加简洁。
简单用例
场景:向MainActivity中注入MainPresenter对象
导入相关库
MainPresenter类
核心代码
DaggerApplication来源于支持库且有两个: dagger.android.DaggerApplication:支持普通组件,不支持扩展(v4,v7)组件dagger.android.supportDaggerApplication:支持扩展组件,不支持普通组件
如果项目中需要支持两种类型的组件,可以采用上述代码中的形式,即: 继承dagger.android.DaggerApplication并实现HasSupportFragmentInjector接口。
这里写ActivityModule类只为了逻辑清晰,也可以将其内部实现直接写到AppComponent中。
以上代码是该例实现的重点,先不急去理解,因为其更像是模板化的代码,先知其然,再慢慢知其所以然。
现在我们已经实现了将MainActivity绑定到框架中,下面看一下怎么注入对象。
在MainActivity中注入MainPresenter
小结
可以这样理解,我们先用应用的AppApplication和AppComponent类搭好一个依赖注入的框架,而需要注入对象的组件,通过声明和继承绑定到框架中,即可注入对象。相比于普通的Dagger2使用,我们省略了以下步骤:
@Binds
类似于@Provides,在使用接口声明时使用,区别是@Binds用于修饰抽象类中的抽象方法的,看下实例吧。 场景:将MainPresenter注入到MainActivity中
Presenter接口和MainPresenter
添加一个MainModule类来统一管理
在MainActivity中自动注入对象
小结
将上述的
@Bindsabstract Presenter mainPresenter(MainPresenter mainPresenter);
换成
@Providesstatic Presenter mainPresenter(MainPresenter mainPresenter) { return new mainPresenter(); }
也是可以的,使用@Binds相比@Provides的好处是,更有效率。
扩展
要给MainPresenter加两个int参数id,type:
以上就是我们这三篇文章的全部内容了,感谢大家的支持
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!