Chcę wprowadzić zastrzyk zależności za pośrednictwem Dagger do projektu. Poniższy kod służy jako przykład do opisania problemu wtrysku do klas statycznych.Jak wstrzykiwać do klas statycznych za pomocą sztyletu?
Statyczna metoda setupTextView()
jest wywoływana z wielu klas:
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);
}
});
}
}
Oto jeden z przykładów, jak stosowana jest metoda pomocnika:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick);
Śledzenie stosowany w metodzie pomocnika jest zapewniana przez klasa aplikacji:
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;
}
}
Teraz chcę wstrzyknąć potwierdzenie przez Dagger. Kiedy refactored kod zauważyłem, że muszę przekazać obiekt do śledzenia z mojej działalności lub fragment do statycznej pomocnika, ponieważ nie można bezpośrednio wprowadzić do klasy statycznej:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick,
Tracking tracking);
nie czuć się jak dobry projekt wzór - od momentu przejścia przez obiekt TrackPoint
i Tracking
. Jak mógłbyś to poprawić?
NsaTracking? -) – ligi