Java Dagger 2-将类注入声明的接口

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

我依赖于ApiService中的类(用户)。我的组件类中已经有一个
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
实现。这就是为什么您必须指定此方法并添加第二种方法。

是的,这也是我的解决方案,但我希望找到更优雅的方法。现在,我认为在注入实现时很难做到明确无误。不过,我还是会让这个问题有更多的想法(如果有的话),然后我会标记接受的答案。穆尔扎姆。