2017-05-01 9 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()으로 전화하면 대거는 "BackendService를 만드는 방법에 대해 걱정하지 않아도됩니다."라고 말합니다. 또한 Dagger가 @Inject-annotated 생성자 및 메서드를 호출하거나 @Inject-annotated fields를 채우는 것을 방지합니다.

해당 메소드를 삭제하면 Dagger가 BackendService를 검사하여 인스턴스화하는 방법을 배우게됩니다.이 시점에서 @Inject 생성자 및 필드가 표시되고 필요한 경우 BackendService를 생성하는 데 사용됩니다.

+0

내 문제를 해결했습니다. 문제를 설명해 주셔서 감사합니다 .-) –