를 사용해야하는 경우
나는 당신이
- 생성자 주입
- 필드를 단검을 사용하는 기본적으로 3 가지 방법이 내가 생성자의 인수로 종속성을 넣어해야 할 때 이해하지 않거나 주입
- 모듈에서 직접 제공
는 클래스를 제공하는 모듈을 사용하고 다음
(또한 객체를 생성 한 후 메서드를 호출하는 방법 주입이있다). 잘못하지는 않았지만 이것은 작성하고 유지 관리하는 데 가장 많은 오버 헤드입니다. 요청 된 의존성에 전달하여 객체를 생성하고 반환 :
이 작업은 한 장소에서 개체를 만들 수
Gson
,
OkHttp
, 정도
Retrofit
같은 추가 설정이 필요 것들과 함께 사용되어야한다
// in a module
@Provides
public Presenter provideMainActivityPresenter(Model model){
// you request model and pass it to the constructor yourself
return new MainPresenter(model);
}
필요한 의존성.
다음은 액세스 권한이 없거나 사용하지 않을 개체를 삽입하는 데 사용됩니다. 당신은 필드에 주석하고 구성 요소에서 방법을 등록 할 개체를 주입 :
@Component class SomeComponent {
void injectPresenter(MainPresenter presenter);
}
public class MainPresenter implements Presenter {
// it's not annotated by @Inject, so it will be ignored
@Nullable
private ViewImpl view;
// will be field injected by calling Component.injectPresenter(presenter)
@Inject
Model model;
// other methods, etc
}
이 또한 발표자 모든 클래스를 등록하는 오버 헤드를 제공 할 것입니다 당신이 생성자를 사용할 수없는 경우에 사용한다 활동, 파편 또는 서비스와 같은 그렇기 때문에 모든 Dagger 샘플에는 Android 프레임 워크의 일부를 주입하는 방법이 onCreate() { DaggerComponent.inject(this); }
있습니다.
가장 중요한 것은 생성자 삽입을 사용할 수 있다는 것입니다. 생성자에 @Inject
으로 주석을 달고 대거가 생성 방법을 찾도록하십시오.
public class MainPresenter implements Presenter {
// not assigned by constructor
@Nullable
private ViewImpl view;
// assigned in the constructor which gets called by dagger and the dependency is passed in
private Model model;
// dagger will call the constructor and pass in the Model
@Inject
public MainPresenter(Model model) {
this.model = model;
}
}
에만 클래스 생성자를 주석 것을 요구하고 단검 모든 종속성 (생성자 인자,이 예에서는 모델)을 제공 할 수 있음을 주어, 그것을 처리하는 방법을 알 수 있습니다.
위에서 언급 한 모든 방법은 개체를 만들고 다른 상황에서 사용할 수 있어야합니다.
이러한 메서드는 모두 생성자에 종속성을 전달하거나 @Inject
주석 필드를 직접 삽입합니다. 의존성은 생성자에 있거나 @Inject
에 의해 주석을 달아서 단검이 그것에 대해 알 수 있도록해야합니다.
또한 the basic usage of Dagger 2에 대한 블로그 글을 썼습니다.
단검의 기본 사항을 이해해야합니다. 이 자습서를 시도하십시오 : https://www.techyourchance.com/dagger-tutorial/ – Vasiliy