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
이라는 자동 생성 클래스도 있습니다.이 클래스를 직접 사용해야합니까?
거의 감사합니다. 이것은 효과적이었습니다 : void inject (MainApplication application); 대신 게시 매개 변수. – Paco1
예, 클래스를 사용해야합니다. 메소드를 삽입하면 인터페이스가 작동하지 않습니다. – ootinii
이 코드가 질문에 대답 할 수 있지만 _how_에 대한 추가 [컨텍스트] (https://meta.stackexchange.com/q/114762)를 제공합니다. 그리고/또는 그것이 문제를 해결한다면 대답의 장기적인 가치가 향상 될 것입니다. 또한 왜이 답변이 다른 사람들보다 더 적절한지 언급하지 않아도됩니다. –