上一篇讲了些简单的用法,这篇在继续积累点知识
@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中 我需要
@Inject
Parent 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);
}