如下所示:
public class MainActivity extends Activity {
@Inject
User mUser1;
@Inject
User mUser2;
@Inject
User mUser3;
protected void onCreate(@Nullable Bundle savedInstanceState) {
// how to inject ...
......
Log.d("XXX",mUser1.getName());
Log.d("XXX",mUser2.getName());
Log.d("XXX",mUser3.getName());
}
}
public class User {
private final String name;
public User (String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@Module
public class MainModule {
@Provides
User providesUser(String name) {
return new User(name);
}
@Provides
String providesUser() {
return "Jack";
}
}
@Component(modules = MainModule .class)
public interface ChildComponent {
void inject(MainActivity activity);
}
在代码上方,只创建三个具有相同名称的用户对象,但我想用diff名称
创建我尝试使用' @ Qualifier',但它只区分构造函数,无法传输名称参数
我在MainModule.java中尝试这个:
@Named("Yuri")
@Provides
User providesUser() {
return new User("yuri");
}
@Named("Warren")
@Provides
User providesUser() {
return new User("warren");
}
@Named("Jack")
@Provides
User providesUser() {
return new User("Jack");
}
但方法'提供用户'已定义。
名称参数是最终的,无法修改
如何处理这种情况!!!
答案 0 :(得分:0)
方法名称无关紧要。只有返回类型才是最重要的。所以:
@Named("Yuri")
@Provides
User providesUserYuri() {
return new User("yuri");
}
@Named("Warren")
@Provides
User providesUserWarren() {
return new User("warren");
}
@Named("Jack")
@Provides
User providesUserJack() {
return new User("Jack");
}
答案 1 :(得分:0)
如果您想要动态名称关联,请不要使用@Qualifier
,这些仅用于@Providers
参数的差异化。
只需使用Java POJO
对象
现在User
类就像这样:
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
现在在Activity
你可以这样说:
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
user1.setName("Ali");
user2.setName("Hossein");
user3.setName("Reza");
Log.d(TAG, user1.getName());
Log.d(TAG, user2.getName());
Log.d(TAG, user3.getName());
}