2017-05-01 1 views
1

私はdagger2で再生しようとしていましたが、フィールド注入に問題がありました。Dagger2は注入されたクラスの中にフィールドを注入できません

POJOクラス:

// User.java 
public class User { 
    private String firstName, lastName; 
    public User(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

クラスI userフィールドを注入することはできません。

//BackendService.java 
public class BackendService { 
    @Inject 
    public User user; // Not injected -> Null 

    @Inject 
    public BackendService() { 
    } 
} 

ユーザープロバイダクラス

// UserModule.java 
@Module 
public class UserModule { 

    @Provides 
    @Singleton 
    User providesUser() { 
     return new User("AA","BB"); 
    } 
} 

バックエンドプロバイダクラス

// BackendServiceModule.java 
@Module 
public class BackendServiceModule { 
    @Provides 
    BackendService provideBackendService() { 
     return new BackendService(); 
    }  
} 

そして最後にではなく、少なくとも、問題があるコンポーネント

// ApplicationComponent.java 
@Component(modules = {UserModule.class, BackendServiceModule.class}) 
public interface ApplicationComponent { 
    BackendService provideBackendService(); 
    void inject(ConsumerMain consumerMain); 
} 

そのBackendService.javaフィールドでuserは注入されません。

注入は、あなたの@Provides BackendServiceメソッドを削除しますBackendService

答えて

3

に正常に動作しています。

new BackendService()に電話すると、Daggerは「BackendServiceを作成する方法について心配しないでください。これにより、Daggerは、@Inject-annotatedコンストラクタとメソッドを呼び出すことも、@Injectの注釈付きフィールドを作成することもできません。

このメソッドを削除すると、DaggerはBackendServiceを検査してインスタンス化する方法を学習します。その時点で@Injectコンストラクタとフィールドが表示され、必要に応じてそれらを使用してBackendServiceを構築します。

+0

私の問題を解決しました。問題を説明してくれてありがとうございます:-) –

関連する問題