美文网首页
Dagger之拓展多构造函数

Dagger之拓展多构造函数

作者: _Youngjim | 来源:发表于2018-04-27 10:01 被阅读0次

这篇不同于初体验教你如何使用,和一些基本的原理。本篇主要讲诉Dagger在面对某些复杂场景的下的扩展。

场景:多构造函数

如果ClassA有两个不一样的参数的构造函数,那么我们在MainActicity界面要有两个ClassA对象注入,那怎么区分?
先把代码贴出来

public class ClassA {


    public int num;
    public String s;
    
    
    public ClassA(int num) {
        this.num = num;
    }
    public ClassA(String s) {
        this.s = s;
    }
}
public class MainActivity extends AppCompatActivity {

    @Named("String")
    @Inject
    ClassA sa;

    @Named("Int")
    @Inject
    ClassA ia;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DaggerMainComponent.create().inject(this);
        Log.e("yjm",sa.s+""+sa.num);
        Log.e("yjm",ia.s+""+sa.num);

    }
}

做法就是加个@named(“”)限定符来区分,相信也是很容易理解

@Module
public class MainModule {


    @Named("Int")
    @Provides
   public ClassA providerIntA(int num){
       return new ClassA(num);
   }
    @Named("String")
    @Provides
    public ClassA providerStringA(String  s){
        return new ClassA(s);
    }
    @Provides
    String providerString(){
        return "i m string";
    }

    @Provides
    Integer providerInt(){
        return 1;
    }




}
@Component(modules = MainModule.class)
public interface MainComponent {




    void inject(MainActivity activity);
}

这里我们可以看到ClassA构造函数上没有加@inject,这又更加印证了@inject和module类,只要有一个能提供component所需要的参数就可以了。(优先查看module是否提供)

还有使用@Qualifier限定符命名自定义注解也可以区分,和@named相比,后者简单,只支持String,不过足矣。

相关文章

  • Dagger之拓展多构造函数

    这篇不同于初体验教你如何使用,和一些基本的原理。本篇主要讲诉Dagger在面对某些复杂场景的下的扩展。 场景:多构...

  • Dagger2踩坑

    当使用@Inject标记构造函数时,如果次构造函数存在参数,那么Dagger2会对其参数进行注入,去查找provi...

  • Android dagger2

    gradle引入流程 简述dagger2 之为啥要用dagger2 1.比如有一些构造函数,一开始写了new XX...

  • Dagger2 中的 Qualifier

    Dagger2 中创建实例对象有两种方式: Inject 维度:通过用 Inject 注解构造函数 Module ...

  • 构造函数模式-拓展

    先看如下构造函数 在构造函数模式中,new Fn执行,如果Fn中不需要传递参数的话,后面的"()"可以省略。 th...

  • Android RecyclerView不完全笔记

    引入 布局 Adapter 拓展Adapter类 构造函数 写静态ViewHolder内部类 重写onCreate...

  • 九月十六

    PHP类和对象之构造函数和析构函数 PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数...

  • JS的面向对象的编程思想2-构造函数的继承(阮一峰)

    在开发中:有可能构造函数B要是用构造函数A中的一些方法和属性。这个时候要使用继承来拓展B 1:使用 call ap...

  • Draw学习(3)

    Path特效之PathMeasure, 构造函数: 无参数的构造函数:PathMeasure() 创建一个Path...

  • Dagger2

    @Inject(标记属性或者构造函数) 作用1:在类中给属性标记注解,表明这个属性需要Dagger2来给我注入作用...

网友评论

      本文标题:Dagger之拓展多构造函数

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