Java Dagger 2-将类注入声明的接口
我依赖于ApiService中的类(用户)。我的组件类中已经有一个Java Dagger 2-将类注入声明的接口,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我依赖于ApiService中的类(用户)。我的组件类中已经有一个ProviderUser。我正试图使用相同的ProviderUser类将我的用户类注入到2个字段中。问题是一个字段是类,第二个字段是这样的接口: @Inject User user; @Inject UserFull userFull; 和部件代码: package com.ltx.dagger2.components; import com.ltx.dagger2.activities.MainActivity; impor
ProviderUser
。我正试图使用相同的ProviderUser类将我的用户类注入到2个字段中。问题是一个字段是类,第二个字段是这样的接口:
@Inject
User user;
@Inject
UserFull userFull;
和部件代码:
package com.ltx.dagger2.components;
import com.ltx.dagger2.activities.MainActivity;
import com.ltx.dagger2.modules.BackendServiceModule;
import com.ltx.dagger2.modules.UserModule;
import javax.inject.Singleton;
import dagger.Component;
@Singleton
@Component(modules = {UserModule.class, ... other stuff})
public interface AppComponent {
void inject(MainActivity activity);
}
方程式的其他要素:
public class User implements UserFull {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return "User{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
@Override
public String getFullName() {
return firstName + " " + lastName;
}
}
public interface UserFull {
String getFullName();
}
和模块代码:
package com.ltx.dagger2.modules;import com.ltx.dagger2.models.User; import com.ltx.dagger2.models.UserFull; import javax.inject.Singleton;import dagger.Module; import dagger.Provides;
@Module
public class UserModule {
@Singleton
@Provides
User provideUser() {
return new User("Hakuna","Matata");
}
}
我可以强制Dagger2向UserFull字段提供相同的用户类吗?或者我必须始终添加特定的
UserFull ProviderUserFull
方法吗?最简单的方法是在@模块中创建另一个方法,该方法将User
作为参数,并将其作为UserFull
返回:
@Module
public class UserModule {
@Singleton
@Provides
User provideUser() {
return new User("Hakuna","Matata");
}
@Provides
UserFull provideUserFull(User user) {
return user;
}
}
User
参数将由ProviderUser()
方法实现
Dagger无法自行猜测它必须提供哪个UserFull
实现。这就是为什么您必须指定此方法并添加第二种方法。是的,这也是我的解决方案,但我希望找到更优雅的方法。现在,我认为在注入实现时很难做到明确无误。不过,我还是会让这个问题有更多的想法(如果有的话),然后我会标记接受的答案。穆尔扎姆。