说到Android依赖注入框架,网上比较推崇的是google维护的Dagger2框架,使用依赖注入能够带来如下好处: 一、依赖的注入和配置独立于组件以外。二、由于对象是在一个独立、不耦合的地方初始化,因此当注入抽象方法的时候,咱们只须要修改对象的实现方法,而不用大改代码库。三、依赖能够注入到一个组件中:咱们能够注入这些依赖的模拟实现,这样使得测试更加简单。Dagger2能够免去在每一个使用类的地方都使用构造函数构造一个实例,使用@Inject注解可实现类实例的依赖注入,依赖的构建分别支持@Provide、@module注解,用于构建自定义的类和第三方类,并使用@Scope注解来声明依赖的做用域,能够跟acitvity的声明周期绑定在一块儿,在须要的地方自动实现单例模式。写到此处可见Dagger2框架提供的功能很强大,能够帮助咱们的代码进行很好的解耦,可是若是把他实施到具体的项目当中,你会发现事情并无想象中那么便利,并且咱们的工做量增长了:android
应用中每一个页面的须要依赖注入的地方都须要写一份模板代码来实现,比较繁琐。并且若是咱们的项目是多module工程,须要建立不少Component类,不能放到library中去实现,由于这会涉及到module工程循环引用的问题。咱们平时开发的工做量主要来源于业务需求,须要建立不少新的页面,这时候不单单要考虑代码怎么作到低耦合,代码的高内聚也是很重要的,这有助于减小代码量和测试的工做量。由此想到是否能够把依赖注入的过程放到Activity或者Fragment的基类中去实现,好比将MVP代码框架里面的presenter放到基类中去注入,咱们去实现每一个具体的页面的时候去扩展这个基类便可,不须要再在每一个扩展类中去写这些模板代码。 RoboGuice是一种比Dagger使用更简易的依赖注入框架,他不须要定义各类Component注射器,直接经过 RoboGuice.getInjector()就能够拿到注射器,支持视图、资源、系统服务、对象等注入,而且能够经过注解来实现单例模式,基本能实现dagger提供的功能,很是适合MVP框架,能够在Activity或者Fragment的基类去实现presenter的注入:
笔者很是推荐你们使用这套框架! 若是项目使用kotlin语言则有更多的选择,kodein框架是一个不错的选择:
只要在你的Module中绑定须要的实例构造方法,在须要用到该实例的页面经过by instance()的调用去实现依赖的检索:
更多用法能够上
官网查看:
github demo