Dagger 2:注入具有大量接入点的单身人士

时间:2015-11-05 12:45:40

标签: android dependency-injection dagger dagger-2

我刚开始使用DI / Dagger 2.我有一个庞大的项目。为了尝试匕首2,我开始注入我的单身课程' MyPreferences'。此类处理来自SharedPreferences的所有应用操作。

自动注入MyPreferences中的SharedPreferences完美无缺。

但是,我在大约50个班级中使用这个单身人士,我曾经这样做过:

 MyPreferences.getInstance(context).getXXXSetting();

我已经在几个类中将其更改为dagger2注入,并且它工作正常,但我发现自己一直在复制这些行:

@Inject
protected MyPreferences myPreferences;

protected void initInjection(Context context) {
    ((RootApplicationDi) context.getApplicationContext()).getComponent().injectTo(this);
}

// + call initInjection @ onCreate / constructor

对于这样一个简单的调用,我需要大约35-40(超级)类中的所有这些行。我错过了什么吗?这真的是要走的路吗?

1 个答案:

答案 0 :(得分:0)

我之前的答案是针对Dagger 1,因此不正确。以下是Dagger 2的示例解决方案:

在您的申请类中:

private MyDagger2Component mDependencyInjector;


@Override
public void onCreate() {
    super.onCreate();

    mDependencyInjector = DaggerMyDagger2Component.builder()...build();
}


public MyDagger2Component getDependencyInjector() {
    return mDependencyInjector;
}

在您的活动扩展的基础Activity课程中:

protected MyDaggerComponent getDependencyInjector() {
    return ((MyApplication) getApplication()).getDependencyInjector();
}

在您的活动中,您现在只能注射一行:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getDependencyInjector().inject(this);
    ...
}