Dagger - 匕首,顾名思义,比ButterKnife这把黄油刀锋利得多。Square为什么这么有自信地给它取了这个名字,Google又为什么会拿去做了Dagger2呢?希望本文能讲清楚为什么要用Dagger2,又如何用好Dagger2。
本文会从Dagger2的起源开始,途径其初衷、使用场景、依赖图,最后介绍一下我在项目中的具体应用和心得体会。
Dagger2 ,起源于Square的 Dagger ,是一个完全在编译期间进行的依赖注入框架,完全去除了反射。
关于Dagger2的最初想法,来自于2013年12月的 Proposal: Dagger 2.0 ,Jake大神在issue里面也有回复哦,而idea的来源者 Gregory Kick 的GitHub个人主页也没多少follower,自己也没几个项目,主要都在贡献其他的repository,可见海外重复造轮子的风气比我们这儿好多了。
扯远了,Dagger2的诞生就是源于开发者们对Dagger1半静态化半运行时的不满(尤其是在服务端的大型应用上),想要改造成完整的图生成,完全生成代码的依赖注入解决方案。在消除什么对Android更适合以及对大型应用来说什么更有意义(往往有可怕数量的绑定)两者之间的隔阂后,Dagger2诞生了。
Dagger2的初衷就是装逼,啊,不对,是可以让你少些很多公式化代码,并通过依赖注入达到更容易测试,降低耦合,创建可复用可互换的模块。你可以在Debug包,测试运行包以及release包优雅注入三种不同的实现。
…未完待续