Dagger-Inject同时向字段变量和构造函数提供bean



我有一个具有以下结构的类。

在Dagger中,像我下面所做的那样,同时在字段变量和构造函数中注入bean是"合法的"吗?如果没有-我有一个MyActivityModule和MyApplicationModule,我如何从MyApplicationModule获得依赖项,并将它们添加到我在MyActivityMode中的provideWhatEvery中使用的构造函数中?

@Inject SmsFormatter mSmsFormatter;
@Inject SmsGuardiansUtils smsGuardiansUtils;
@Inject BipperMediaPlayer bipperMediaPlayer;
@Inject MixPanelUtils mMixpanelUtils;

@Inject
public ImHereController(View view, Context context, AlarmModel alarmModel, ActionBarListener actionBarListener,
        FragmentController fragmentController){
    super(view, context, alarmModel, actionBarListener, fragmentController);
}

您可以根据需要注入字段和构造函数。构造函数参数将首先解析并在构造时注入,然后注入字段。

问题的其他部分还不清楚——无论是通过字段注入还是构造函数注入来添加依赖项都无关紧要——如果你想通过构造函数注入来全部添加它们,你可以。

必须使用字段注入的唯一时间是您有一个无法控制其实例化的对象,因此dagger本身无法实例化(如活动和应用程序子类型)

尽管如此,如果没有一些令人信服的理由,我不会同时使用这两种方法——构造函数注入在语义上更清晰,并且可以使实例变量成为最终变量。或者,字段注入更简洁,在某些情况下可能更可读。我会选一个,而不是两者都选。

相关内容

最新更新