2017-03-21 3 views
4

dagger.android 패키지로 새로 출시 된 대거 2.10을 사용하여 작은 Android 프로젝트를 시도했습니다. 만 MainApplication 클래스가 단검으로 주입해야 는 아무것도 아직 어떤 종속성이 없습니다 :대거 2 안드로이드 응용 프로그램 구성 요소가 없습니다. 주입 방법

build.gradle

dependencies { 
    ... 
    // Dagger 
    compile 'com.google.dagger:dagger:2.10' 
    compile 'com.google.dagger:dagger-android:2.10' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10' 

    // Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests 
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1' 
} 

MainApplication.java

public class MainApplication extends Application implements HasDispatchingActivityInjector { 

    @Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     DaggerMainApplicationComponent.create(); 
    // DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method! 
    } 

    @Override 
    public DispatchingAndroidInjector<Activity> activityInjector() { 
     return dispatchingAndroidInjector; 
    } 
} 

에게

@Component(modules = AndroidInjectionModule.class) 
public interface MainApplicationComponent {} 
MainApplicationComponent.java을

자동 생성 단검 메인 애플리케이션 tionComponent.java :

public final class DaggerMainApplicationComponent implements MainApplicationComponent { 
    private DaggerMainApplicationComponent(Builder builder) { 
    assert builder != null; 
    } 

    public static Builder builder() { 
    return new Builder(); 
    } 

    public static MainApplicationComponent create() { 
    return new Builder().build(); 
    } 

    public static final class Builder { 
    private Builder() {} 

    public MainApplicationComponent build() { 
     return new DaggerMainApplicationComponent(this); 
    } 
    } 
} 

내가 대거 새로운 오전과 자원을 많이가 있지만, 많은 오래된 대거 라이브러리와 DI를 설명하고 있습니다. 구현시에 잘못된 점은 무엇입니까? MainApplication_MembersInjector이라는 자동 생성 클래스도 있습니다.이 클래스를 직접 사용해야합니까?

답변

0
@Component(modules = AndroidInjectionModule.class) 
public interface MainApplicationComponent { 
    void inject(DispatchingAndroidInjector dispatchingAndroidInjector); 

} 
+3

거의 감사합니다. 이것은 효과적이었습니다 : void inject (MainApplication application); 대신 게시 매개 변수. – Paco1

+0

예, 클래스를 사용해야합니다. 메소드를 삽입하면 인터페이스가 작동하지 않습니다. – ootinii

+0

이 코드가 질문에 대답 할 수 있지만 _how_에 대한 추가 [컨텍스트] (https://meta.stackexchange.com/q/114762)를 제공합니다. 그리고/또는 그것이 문제를 해결한다면 대답의 장기적인 가치가 향상 될 것입니다. 또한 왜이 답변이 다른 사람들보다 더 적절한지 언급하지 않아도됩니다. –

관련 문제