개발중인 응용 프로그램에서 단검 2를 사용하기 시작했는데 단검 2 작동 방식에 대해 몇 가지 질문이 있습니다.단검 2 주입 생성자
@Provides 메소드와 @Inject 주석 뒤에 모든 로직이 있으므로 의존성을 초기화 할 수 있지만 클래스 생성자에 @Inject 주석을 사용하면 버그가 생길 수 있습니다.
이 임은 내 응용 프로그램은, 내가 하나 개의 모듈 내 응용 프로그램의 컨텍스트 검색,의 ContextModule을 정의
을 :ContextModule.java을
@Module
public class ContextModule {
private final Context context;
public ContextModule(Context context) {
this.context = context;
}
@Provides
public Context context() {
return this.context;
}
}
이 모듈이 사용되는 예를 들어
내 BaseActivityComponent에 의해 :
BaseActivityComponent.java
@BaseActivityScope
@Component(modules = ContextModule.class)
public interface BaseActivityComponent {
void injectBaseActivity(BaseActivity baseActivity);
}
지금까지 그렇게 좋았습니다. 그런 다음 AuthController 클래스가 있습니다.이 클래스는 컨텍스트에 따라 다르며 BaseActivity에 삽입하려고합니다. 그래서 내 AuthControllers.class에서 내가 좋아하는 뭔가가 있습니다
public class AuthController {
private Context context;
@Inject
public AuthController(Context context) {
this.context = context;
}
public void auth() {
// DO STUFF WITH CONTEXT
}
}
을 그리고 내가 좋아하는 내 BaseActivity에 주입 : 이제
public class BaseActivity extends AppCompatActivity {
@Inject
AuthController authController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BaseActivityComponent component = DaggerBaseActivityComponent.builder()
.contextModule(new ContextModule(this))
.build();
component.injectBaseActivity(this);
authController.auth();
}
}
내 질문은, 어떻게 단검 내 AuthControllers이에 대한 종속성 것을 알고 않습니다 BaseActivity?
@Module(includes = ContextModule.class)
public class ControllerModule {
@Provides
AuthController authController(Context context) {
return new AuthController(context);
}
}
그리고 내 BaseActivityComponent에 내가 ControllersModule 내 종속 모듈을 내 AuthController 게터를 추가하고 변경합니다 : : 그냥
@Inject
AuthController authController;
내가 같은 ControllerModule을 만든 것처럼이 같은 일처럼 선언하여
내가 injectBaseActivity를 호출 할 때@BaseActivityScope
@Component(modules = ControllersModule.class)
public interface BaseActivityComponent {
void injectBaseActivity(BaseActivity baseActivity);
AuthController getAuthController();
}
가 (이)는 모든 @Inject 주석 내 클래스의 종속성이있는 단검 한 다음 수색자 내 proje "을 알려줍니다" 해당 유형과 일치하는 주석 처리 된 @ 생성자에 대한 ct?
대거 2에 대한 좋은 점은 모듈 파일이 내 의존성 3의 "문서"로 사용될 수 있다고 생각했습니다. 하지만 컨트롤이있는 모든 생성자에 @Inject를 추가하면 미래에 약간 혼란스럽지 않을 수 있습니다. 실제로 무엇이 무엇에 의존하는지 모르기 때문에? (내 말은, 당신이 무엇에 달려 있는지, 당신은 단지 많은 파일을 찾아서 실제로 찾아야한다는 것을 안다는 뜻이다.)
@Inject 어노테이션을 생성자에서 사용할 때나 @Provides 메소드를 추가 할 때 유용한 모범 사례가 있는가? 모듈 파일에? 생성자에서 @Inject를 사용하면 모듈 파일에서 생성자 정의를 변경할 필요가 없지만 단점이 있습니까?
감사합니다. 내가 injectBaseActivity를 호출 할 때
끔찍한 답변입니다. Kotlin 기본 생성자 (클래스 정의로 정의 된 생성자)에 주입 기능을 추가 할 수 있는지 알고 계십니까? –
@saiedVanguard 가능합니다 :'class A @Inject constructor (...)' –