2014-09-18 4 views
3

대거가 내 엉덩이를 차고 있습니다.안드로이드 대거 @ 주사가 null

다음 레이아웃이 있습니다.

  • 오브젝트 그래프에 주입되는 MainActivity.
  • MainActivity @Injects는 MainPresenter 인터페이스입니다. 이는 구체적인 구현을 반환하는 MainModule을 통해 제공됩니다.
  • 구체적인 MainPresenter 구현은 FileContentInteractor 인터페이스를 사용합니다. 이는 구체적인 FileContentInteractor 구현을 반환하는 InteractorModule에서 제공됩니다. 지금 모든 것이 잘 될 때까지 위로

InteractorModule.class이 포함되어 있기 때문에

  • MainModule이 작업을 수행 할 수 있습니다. 이 시점부터 까다로운 부분이 있습니다.

    구체적인 FileContentInteractor 구현체는 @Inject를 사용하여 일부 멤버 변수를 주입합니다. 이 멤버 변수는 각각의 모듈을 통해 구체적인 구현을 제공하는 모든 인터페이스입니다.

    예제는 @Inject ThreadExecutor threadExecutor입니다. 나는 이것이 제공 될 것이라고 생각했다.

    • InteractorModule에는 ExecutorModule.class가 포함됩니다.
    • ExecutorModule.class @는 ThreadExecutor의 구체적인 구현을 TaasExecutor 객체 형식으로 제공합니다.
    • TaskExecutor 개체에 주입 된 종속성이 없습니다.

    내 앱을 실행하고 MainActivity가 열리면 다음과 같은 현상이 발생합니다.

    • MainActivity는 MainPresenter 구현 방법을 호출합니다.
    • MainPresenter에 FileContentInteractor 구현이 있고 그것에 대한 메서드를 호출합니다. - 작동
    • FileContentInteractor 구현의 메서드는 ThreadExecutor 구현 (@Injected가 멤버 변수 임)에서 메서드를 호출하려고합니다. @Injected ThreadExecutor 구현이 null이기 때문에 실패했습니다.

    아무도 도와 줄 수 있습니까? 좋아

  • 답변

    -1

    그것이 내가 내 자신의 엉덩이를 발로했습니다 밝혀, 그래서 ...

    내 @Inject 회원들과 구체적인 클래스를 참조하지만 내 @Provides로 인터페이스를 사용하고 있었다.

    클래스에서 @Inject 멤버를 수정하여 인터페이스로 고정했습니다.

    관련 문제