Dagger2 : Dependency Injection
Dagger2 : Dependency Injection
1. 새로운 activity, fragment 등을 생성해서 객체 주입하는 시나리오
- 새
activity,fragmentclass 이름을ExampleActivity.java라고 한다. - database에 접근하거나 할때, 필요한
*Service를 확인 - 멤버 변수에 정의. (
CustomerService,SaveService를 사용한다고 가정) ApplicationComponent.java에void inject(ExampleActivity target);추가
BaseFA로 정의된 void inject(BaseFA target);가 있어도 void inject(ExampleActivity target);를 만드는 이유
- dagger2가
Abstract로 상속받아 만든class에 별도로 정의된@Inject할 멤버변수는 제대로 인스턴스 주입이 되지 않는다 -
ExampleActivity.java에서inject실행 fragment에서inject도 동일한 방법으로 실행
@Component(...)
public interface ApplicationComponent {
void inject(ExampleActivity target);
}
public class ExampleActivity extends BaseFA {
@Inject
CustomerService customerService;
@Override
protected void onCreate(Bundle savedInstanceState) {
((MyApplication) getApplicationContext()).getApplicationComponent().inject(this);
}
}
2. 인스턴스 하나만 주입하는 경우
public class ExampleActivity extends BaseFA {
private CustomerService customerService;
@Override
protected void onCreate(Bundle savedInstanceState) {
saveService = ((MyApplication) getApplicationContext()).getApplicationComponent().getSaveService();
}
}
ApplicationComponent.java에 정의한SaveService getSaveService();을 통해서 인스턴스가 주입됨.