【发布时间】:2026-01-03 06:15:02
【问题描述】:
如下:
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);
}
上面的代码,只创建了三个同名的用户对象,但我想用不同的名称创建
我尝试使用'@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");
}
但是“providesUser”方法已经定义好了。
名称参数是最终的,不能修改
这种情况应该怎么处理!!!
【问题讨论】:
-
你想要的是一个
UserFactory,它可以接受一个参数name并返回一个完全注入的User实例,其中name与注入的依赖项一起提供。这个概念在 Guice 中称为“辅助注射”;我标记为这个问题的重复:Can I use some kind of assisted Inject with Dagger? -
我不明白。意思是使用新库'Guice'?避免使用这种方式?
-
Guice 是一个较旧的依赖注入框架,它(在某种程度上)与 Dagger 相关。使用 Guice 的人都知道“辅助注射”一词,但如果您从 Dagger 开始,可能会不清楚。无论如何,您问的问题与我链接的问题相同。
标签: dagger