像下面這樣:如何在dagger2中傳遞參數?
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」,但它只是區分構造,不能將name參數
我嘗試這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',這可能需要一個參數'名'並返回一個完全注入的'User'實例,並在注入的依賴關係旁邊提供該'name'。這個概念在Guice被稱爲「輔助注射」我標記爲這個問題的重複:[我可以使用某種輔助注入匕首?](http://stackoverflow.com/questions/29175014/can-i-use-some-kind-of-assisted -inject-with-dagger) –
我不明白。 意思是使用新庫'Guice'? 避免使用這種方式? –
Guice是一個較老的依賴注入框架,它與Dagger有些相關。術語「輔助注射」對於使用Guice的人來說是已知的,但是如果你開始使用Dagger,可能不清楚。無論如何,你問的問題與我鏈接的問題相同。 –