私はお互いに依存するいくつかのクラス、GamePresenter
とGameManager
を持っています。 私はコンストラクタインジェクションを使ってそれらを注入しようとしていますが、依存サイクルエラーが見つかったので、それを動作させる方法をまだ理解できません。ダガー2つのモジュールはお互いに依存します
GameFragment
フラグメントにGamePresenter
を注入する必要があり、そうGameManager
はGamePresenter
に注入されるであろうしながら最初は、第二に話すことになります。
GamePresenter
である:
@Inject
GamePresenter(GameRepository gameRepository, GameManager gameManager, GameContract.View view) {
DaggerGameManagerComponent.builder()
.gameManagerModule(new GameManagerModule(this))
.build()
.inject(this);
this.view = view;
this.gameRepository = gameRepository;
this.gameManager = gameManager;
}
GamePresenterModule
である:
@Module
public class GamePresenterModule {
private final GameContract.View view;
public GamePresenterModule(GameContract.View view) {
this.view = view;
}
@Provides
GameContract.View provideGameContractView() {
return view;
}
}
GamePresenterComponent
である:
@FragmentScoped
@Component(dependencies = RepositoryComponent.class, modules = GamePresenterModule.class)
public interface GamePresenterComponent {
void inject(GameFragment gameFragment);
}
GameManager
である:
@Inject
public GameManager(GamePresenter gamePresenter, Game game) {
this.gamePresenter = gamePresenter;
this.game = game;
}
GameManagerModule
は次のとおりです。
@Module
public class GameManagerModule {
private GamePresenter presenter;
public GameManagerModule(GamePresenter presenter) {
this.presenter = presenter;
}
@Provides
GameManager provideGameManager(Game game) {
return new GameManager(this.presenter, game);
}
@Provides
Game provideGame() {
return new Game();
}
}
GameManagerComponent
は次のとおりです。
@FragmentScoped
@Component(dependencies = GamePresenterComponent.class, modules = GameManagerModule.class)
public interface GameManagerComponent {
void inject(GamePresenter gamePresenter);
}
そして最後に、GameFragment
は次のとおりです。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
DaggerGamePresenterComponent.builder()
.repositoryComponent(((GameApplication) getActivity().getApplication()).getRepositoryComponent())
.gamePresenterModule(new GamePresenterModule(this))
.build()
.inject(this);
}
事前にどうもありがとう!
どうすればいいですか?特に "コンストラクタまたはプロバイダの内部に登録する" – noloman