我想通过Dagger来介绍依赖注入到一个项目中。以下代码是用来描述向静态类注入依赖问题的示例。
setupTextView()
静态方法从多个类中被调用:
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);
}
});
}
}
下面是一个使用辅助方法的例子:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick);
帮助方法中使用的跟踪是由应用程序类提供的:
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;
}
}
现在,我想通过Dagger注入追踪功能。当我重构代码时,我注意到我需要从我的Activity或Fragment将追踪对象传递给静态帮助程序,因为我无法直接注入静态类:
TextViewHelper.setupTextView(this, R.id.some_text_view,
R.string.some_text,
TrackingPoint.SomeTextClick,
Tracking tracking);
这不像是一个好的设计模式 - 因为我传递了TrackPoint
和Tracking
对象。你会如何改进这个?