美文网首页
Android dagger2

Android dagger2

作者: jimdear | 来源:发表于2020-01-20 16:05 被阅读0次

    gradle引入流程

    implementation 'com.google.dagger:dagger:2.15'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.15'
    

    简述dagger2 之为啥要用dagger2

    1.比如有一些构造函数,一开始写了new XXX(X,X),如果后续要继续加多一个数值,那么就会非常麻烦,而dagger利用了桥接模式.新的变量通过桥接模式动态化地引入.很好的避免了代码的修改
    2.优化代码结构,方便团队协作和代码可阅读性.

    dagger2 简单用法

    @Inject标签

    @Inject
    ShowBean showBean;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tvShow = findViewById(R.id.tv_show);
        DaggerMainView.builder()
                .build()
                .inject(this);
        tvShow.setText(showBean.getMessage());
    }
    

    @name标签

    @Named("release")
    @Inject
    ShowBean showBean;
    

    然后在相应的module中填写相应的业务逻辑代码,这种模式可以区分不同业务场景下,比如dev和relase 下是否要走测试方法或者realse正式的方法之类的,可用于自动化测试或测试环境特殊判断.

    @Named("dev")
    @Provides
    ShowBean providerDevShow() {
        ShowBean showBeanDev = new ShowBean();
        showBeanDev.setMessage("dev_SHow");
        return showBeanDev;
    
    }
    
    @Named("release")
    @Provides
    ShowBean providerReleaseShow() {
        ShowBean showBeanRelease = new ShowBean();
        showBeanRelease.setMessage("release_SHow");
        return showBeanRelease;
    }
    

    module类的配置及@@Component 标签

    @Component(modules = MainModule.class)
    public interface MainView {
    void inject(MainActivity activity);
    }

    构建简单的bean类

    String message = "show message";
    
    String name;
    
    @Inject
    public ShowBean( ) {
    }
    
    public String getMessage() {
        return message;
    }
    
    public void setMessage(String message) {
        this.message = message;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    

    以上配置就可以在容器控件中通过 @Inject ShowBean showBean;得到相应的标签,并且使用.把代码放在module层,activity中比较优雅.

    那么dagger如何在MVP中使用呢

    直接贴上代码

    module层

    image.png

    View 层

    image.png

    Presenter层

    image.png

    Activity中引用

    image.png

    此处注意点事mainModule()这个构造函数,是我们要设置的,意思类似于 吧MainView 设置进去.方便presenter持有这个对象.

    相关文章

      网友评论

          本文标题:Android dagger2

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