私は共通のクラスを作成し、モジュールに入れてすべてのプロジェクトで共有することに決めました。ダガーは間違ったクラスを挿入します(子クラスの代わりに親を挿入します)
は例えば、私は私の共有モジュール
// This is a bass class, no application will use it.
public class GetPlayerInteractor extends ApiInteractor {
@Inject
public GetPlayerInteractor(ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread,
RestClient restClient,
RequestTokenInteractor requestTokenInteractor) {
super(threadExecutor, postExecutionThread, restClient, requestTokenInteractor);
}
}
// This class will accept GetPlayerInteractor or its children class as argument.
public class PlayerAuthenticationInteractor extends ApiInteractor {
@Inject
public PlayerAuthenticationInteractor(ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread,
RestClient restClient,
RequestTokenInteractor requestTokenInteractor,
GetPlayerInteractor getPlayerInteractor) {
super(threadExecutor, postExecutionThread, restClient, requestTokenInteractor,
getPlayerInteractor);
}
}
にし、モジュールを含むアプリケーションで次のようなクラスを持っている
// This one is the actual class I need to inject
public class GetPlayerByEmailInteractor extends GetPlayerInteractor {
private GetDomainNameInteractor getDomainNameInteractor;
@Inject
public GetPlayerByEmailInteractor(ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread,
RestClient restClient,
RequestTokenInteractor requestTokenInteractor,
GetDomainNameInteractor getDomainNameInteractor) {
super(threadExecutor, postExecutionThread, restClient, requestTokenInteractor, getPlayerCustomFieldsInteractor);
this.getDomainNameInteractor = getDomainNameInteractor;
}
}
そして、これは、アプリケーション
@Module
public class UserModule {
@Provides
@PerActivity
GetPlayerInteractor provideGetPlayerInteractor(ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread,
RestClient restClient,
RequestTokenInteractor requestTokenInteractor,
GetDomainNameInteractor getDomainNameInteractor) {
Log.i("Dev", "Create GetPlayerInteractor");
return new GetPlayerByEmailInteractor(threadExecutor, postExecutionThread, restClient, requestTokenInteractor, getDomainNameInteractor);
}
@Provides
@PerActivity
PlayerAuthenticationInteractor providePlayerAuthenticationInteractor(ThreadExecutor threadExecutor,
PostExecutionThread postExecutionThread,
RestClient restClient,
RequestTokenInteractor requestTokenInteractor,
GetPlayerByEmailInteractor getPlayerByEmailInteractor) {
Log.i("Dev", "Create PlayerAuthenticationInteractor");
return new PlayerAuthenticationInteractor(threadExecutor, postExecutionThread, restClient, requestTokenInteractor, getPlayerByEmailInteractor);
}
}
でUserModuleです
GetPlayerInteractorのための@Provideは、決して基本クラスbuであるため書かない何らかの理由でGetPlayerByEmailInteractorが作成されていない場合は、Provideメソッドは決して印刷されません(私が決して設定しないブレークポイントも).getPlayerByEmailInteractorではなくPlayerAuthenの引数としてgetPlayerInteractorを取得します。また
、私はまだビルド成功を
@Provide
@PerActivity
GetPlayerInteractor provideGetPlayerInteractor(...)
と
@Provide
@PerActivity
PlayerAuthenticationInteractor providePlayerAuthenticationInteractor(...)
の両方を削除して、アプリが
私はDaggerApplicationComponentを見てみると、私は次のように参照を実行できるかどうか
public final class DaggerApplicationComponent implements ApplicationComponent {
// Some other classes
private Provider<GetPlayerInteractor> getPlayerInteractorProvider;
private Provider<PlayerAuthenticationInteractor> playerAuthenticationInteractorProvider;
// Some other classes
private Provider<GetPlayerByEmailInteractor> getPlayerByEmailInteractorProvider;
// Some other classes
private void initialize(final Builder builder) {
// Some other classes
this.getPlayerInteractorProvider = ...
this.playerAuthenticationInteractorProvider = PlayerAuthenticationInteractor_Factory.create((MembersInjector) MembersInjectors.noOp(), provideThreadExecutorProvider, providePostExecutionThreadProvider, provideRestClientProvider, provideRequestTokenInteractorProvider, getPlayerInteractorProvider);
// Some other classes
this.getPlayerByEmailInteractorProvider = ...
}
}
PlayerAuthenticationInteractor_Factoryに渡すlassパラメータは、getPlayerByEmailInteractorProviderではなく、getPlayerInteractorProviderであることに注意してください。
私は間違っています。
こんにちはデビッド、あなたの答えをありがとうございますが、残念ながらそのメソッドがUserPresenterを提供するために働いていないので、私はすでにGetEmployeeUseCaseクラスをリクエストしています。実際のクラスでコードを更新して、私が逃したものを見る方が良いかもしれない。 –
質問が更新されました。最初は実際のクラスを提供していません。 –
@ Tar_Tw45クラスコンストラクタの '@ Inject'アノテーションを削除してみてください。あなたの提供するメソッドは無視されます –