Verwenden Sie Dolch 2 in meinem Android mit MVP-Muster, und ein wenig mit einigen Konzepten kämpfen.Dolch 2: Inject Kind Klasse basierend auf Logik
Sagen wir, ich habe einen Moderator DashboardPresenter
, ich bin es injizieren, wenn ich es in einer Aktivität oder andere Moderatoren müssen, unter Verwendung von:
@inject
DashboardPresenter presenter;
oder im Konstruktor von anderen Moderatoren:
@inject
public AccountPresenter(DashboardPresenter presenter) {
//init
}
Jetzt bin ich nicht ganz sicher, wie es funktioniert, aber ich möchte folgendes tun:
Lassen sie uns sagen, dass ich eine BaseDashboardPresenter
schaffen, die die Eltern sein
Und ich erstelle 2 Kinder dafür: NormalDashboardPresenter
und ProDashboardPresenter
beide erstreckt sich davon.
Wenn ich möchte es in einer Tätigkeit oder einem anderen Moderator verwenden, spritze ich die Basis Moderator von
@inject
BaseDashboardPresenter presenter;
Aufruf Und ich überschreiben die @inject
Verhalten, eines der Kinder auf einem boolean Basis zu injizieren. So etwas wie folgt aus:
//in BaseDashboardPresenter
override inject() {
if(Utility.checkIfUserIsPro()) {
inject ProDashboardPresenter();
} else {
inject NormalDashboardPresenter();
}
}
so aus meiner Tätigkeit Ich nenne nur die abstrakten Methoden in der Basisklasse, und der Unterschied ist nur, welches Kind injiziert wird.
Ist das möglich? Gerne bei Bedarf weitere Erläuterungen geben.
Hinzufügen von Logik zu einem '@ Bietet' Methode ist in der Regel keine gute Idee und es wird verwirrend und schwer zu pflegen, wenn beide Varianten unterschiedliche Abhängigkeiten haben –
Sorry, dies aus meiner Frage weggelassen haben, aber NormalDashboardPresenter nimmt andere Moderatoren und Klassen als Argument und sie sind alle injiziert. '@ inject' ' public NormalDashboardPresenter (OtherPresenter) {} ' Also muss ich auch Instanz von OtherPresenter erstellen? – Youssef
@DavidMedenjak Ja, du hast Recht. Dolch sollte nur Injektion verwalten und sollte keine Logik enthalten.Youssef, können Sie Extras Moderator als Argumente übergeben (Ich habe meine Antwort bearbeitet) – guillaume