Ich möchte Abhängigkeitsinjektion durch Dagger zu einem Projekt einführen. Der folgende Code dient als Beispiel zur Beschreibung des Problems der Injektion in statische Klassen.Wie injizieren in statische Klassen mit Dolch?
Die statische Methode setupTextView()
wird aus mehreren Klassen genannt:
public abstract class TextViewHelper {
public static void setupTextView(TextView textView,
Spanned text,
TrackingPoint trackingPoint) {
textView.setText(text, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyApp.getTracker().track(trackingPoint);
}
});
}
}
Hier ein Beispiel dafür ist, wie die Hilfsmethode verwendet wird:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick);
Die in der Hilfsmethode verwendet Verfolgung durch die zur Verfügung gestellt wird Anwendungsklasse:
public class MyApp extends Application {
private static Tracking mTracking;
public void onCreate() {
super.onCreate();
mTracking = getTracking(getApplicationContext());
}
private Tracking getTracking(Context context) {
if (BuildConfig.DEBUG) {
return new NoTracking();
} else {
return new NsaTracking(context);
}
}
public static Tracking getTracker() {
return mTracking;
}
}
Jetzt möchte ich die tr injizieren acking über Dolch. Wenn ich den Code Refactoring bemerkte ich, dass ich brauchen würde das Tracking-Objekt von meiner Aktivität oder Fragmente zu dem statischen Helfer passieren, da es nicht direkt in die statische Klasse injizieren:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick,
Tracking tracking);
Das fühlt sich nicht wie ein gutes Design Muster - seit ich das TrackPoint
und das Tracking
Objekt passiere. Wie würdest du das verbessern?
NsaTracking? -) – ligi