Android Dagger2 自定义@Qualifier
先定义两个Qualifier,待会在Module中用于区分两个Person
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface QualifierStudent {}
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface QualifierTeacher {}
public interface Person {
String saySomething();
}
public class Student implements Person {
public String name;
public Student() {
this.name = "野猿新一";
}
@Override
public String saySomething() {
return String.format("我的名字叫%s啦", name);
}
}
public class Teacher implements Person {
public String name;
public Teacher() {
this.name = "苍老湿";
}
@Override
public String saySomething() {
return String.format("我的名字叫%s啦", name);
}
}
这里是重点,用上面定义的两个Qualifier @QualifierStudent和@QualifierTeacher来区分两个放回类型都为Person的方法
@Module
public class MainModule {
@Provides
@QualifierStudent
public Person provideStudent() {
return new Student();
}
@Provides
@QualifierTeacher
public Person provideTeacher() {
return new Teacher();
}
}
@Component(modules = MainModule.class)
public interface MainActivityComponent {
void inject(MainActivity activity);
}
这里是另一个重点,被注入的变量也要用Qualifier标注,表示要用那个方法来生成对象
public class MainActivity extends AppCompatActivity {
@Inject
@QualifierTeacher
Person person;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainActivityComponent.create().inject(this);
TextView textView = findViewById(R.id.text);
textView.setText(person.saySomething());
}
}

浙公网安备 33010602011771号