私はApiServiceのクラス(User)に依存しています。私はすでにコンポーネントクラスにprovideUser
を持っています。私は2つのフィールドに同じprovideUser私のユーザークラスを注入しようとしています。問題は、一つのフィールドがクラスであり、第二は、このようなインターフェイスであることである。ダガー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フィールドに同じUserクラスを強制的に渡すことができますか、または特定のUserFull provideUserFull
メソッドを追加する必要がありますか?
ええ、それも私の解決ですが、私はもっと優雅なものを見つけることをもっと望んでいます。今私はインプリメンテーションをインジェクトするときに明確にするのは難しいと思っています。しかし、まだ、私はより多くのアイデア(もしあれば)を開いたままにしておきます、そして、私は受け入れられた答えをマークします。マルチザム。 – shadox