依赖注入之Dagger2初探

作者: xuexiangjys | 来源:发表于2018-01-10 14:08 被阅读53次

    Dagger2

        Dagger2是Google提供的依赖注入框架,依赖注入为Android中组件之间的解耦提供了很好的解决方案。Dagger2已经在越来越多的开源项目中被使用,其已经发展成为未来的一个技术趋势。

    为什么要使用Dagger2

        MVP设计模式中,M层提供数据,V层做界面展示,而P层则成为M和V的桥梁,这其中就必然涉及到M和V的交互及处理,如果业务复杂或者多个页面共用,它还是面临着高度的耦合性。如果需求发生变动,必然需要更改P中的内容。而在MVP中,我们通常在activity层中需要拿到p层的对象,那么在开发中有可能我们很多activity或者fragment都可能需要拿到这个p层对象的实例,假如我们P层类的构造发生变化我们要在很多地方都得进行修改,这就是耦合度太高的弊端。为了解决这种耦合性的问题,有一帮牛叉的人就思索着:能不能有个容器,这个容器在我们需要用到某个对象的时候帮我们创建好需要的对象,像对象工厂一样,并且帮我们管理这些对象。当发生变化时,我们只需要换一个容器就可以了。就这样,dagger2应运而生。

    dagger2中组成内容的对应关系:

    类Module:装载对象的容器。

    接口Component:存放这些容器的仓库。

    注解Provides:该容器创建对象的动作。

    注解Inject:从容器中取出这个对象的动作。

    注解Qualifier:用来给Inject和Provides贴上关联标签。如果一个对象可以由多个容器提供,这时候就需要用Qualifier进行标签关联。

    注解Scope:从容器取出对象的有效期,即生命周期。


    如何使用Dagger2

    1.增加Dagger2依赖包

    dependencies {

        implementation 'com.google.dagger:dagger:2.13'

        annotationProcessor 'com.google.dagger:dagger-compiler:2.13'

        compileOnly 'org.glassfish:javax.annotation:10.0-b28'

    }

    2.编写Module

    @Module

    public class LoginModule {

        @ActivityScope

        @Provides

        LoginPresenter getPresenter() {return new LoginPresenter();}}

    3.编写Component

    @ActivityScope

    @Component(modules = {LoginModule.class})

    public interface LoginComponent {

        void inject(LoginActivity activity);

    }

    4.编译一下工程

        AndroidStudio -> Build -> Make Project

    5.依赖注入

    @Override

    protected void onResume({

        super.onResume();

        DaggerLoginComponent.builder().build().inject(this);

        mPresenter.attachV(this);

    }

    Demo工程

    github项目

    相关文章

      网友评论

      本文标题:依赖注入之Dagger2初探

      本文链接:https://www.haomeiwen.com/subject/hddonxtx.html