dagger2的简单入门(二)

来源:互联网 发布:饥荒网络初始化错误 编辑:程序博客网 时间:2024/05/02 07:48
上一篇讲了些简单的用法,这篇在继续积累点知识
@Named限定符号

假设这样一个场景  
父类
public abstract class Parent {    public abstract String getMsg();}
子类1
public class ViscountOne extends Parent{    @Inject    public ViscountOne() {    }    @Override    public String getMsg() {        return "one";    }}
子类2
public class ViscountTwo extends Parent{    @Inject    public ViscountTwo() {    }    @Override    public String getMsg() {        return "two";    }}
在Activity中  我需要
@InjectParent parent;
并且调用getMsg怎么办呢


Ok 来看下@Module层
@Module //提供依赖对象的实例public class MyDemo {    /***     * *********************************华丽的分割线     * 限定符号     * @Named 也可以写城  Named("sss") 里面定义的名称   如果没有值生成的Bean名称默认和类名相同。     */    @Provides    @Named("ViscountOne")    Parent getViscountOne(){        return new ViscountOne();    }    @Provides    @Named("ViscountTwo")    Parent getViscountTwo(){        return new ViscountTwo();    }}
只是在调用的方法中 增加了个@Named

然后在活动调用的时候 
@Inject    @Named("ViscountOne")    Parent parent;
在声明parent的时候   申明@Named

其他的代码不变。


-------------------------------------------------------------------------------------------------------------

@Scope  自定义作用域 实现局部单列
@Scope@Retention(RetentionPolicy.RUNTIME)public @interface MyInstance{}

@Component 层中增加   我们自定义作用域的名称
@MyInstance@Component (modules = {MyDemo.class,MyDemoTwo.class})public interface FistDagger {    //定义注入的方法   注意形参  必须为指定调用的  class   如填写Activity将无法运行    void inject(MainActivity activity);}






0 0
原创粉丝点击