我需要在 Activity 的SharedPreferences中访问我的attachBaseContext实例(以便在此处设置语言环境),但是注入(inject)的SharedPreferences实例在那里不可用,因为在onCreate方法中进行注入(inject),该方法在attachBaseContext调用之后运行。我正在使用dagger2进行依赖注入(inject)。

知道如何避免创建新的SharedPreferences实例吗?

编辑:

好的,所以我认为问题是我试图过多使用 Dagger ,我认为在这种情况下它根本不合适。在每个 Activity 的attachBaseContext中,我必须更新语言环境,并将此更新逻辑提取到LocaleManager,该SharedPreferences需要访问Context实例和在attachBaseContext中获得的SharedPreferencesAppModule实例已经在@Inject中,但是我仍然无法在attachBaseContext调用之前将它attachBaseContext编码到 Activity 中,因为 Activity 的注入(inject)发生在ojit_code之后。

最佳答案

只要您可以访问Component,就可以添加provision method

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {

    fun inject(myActivity: MyActivity)

    fun sharedPreferences(): SharedPreferences

    ...
}

然后直接通过SharedPreferences访问您的Component:
class MyActivity : AppCompatActivity() {

    override fun attachBaseContext(newBase: Context) {
        val sharedPreferences = component.sharedPreferences()
        ...
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        component.inject(this)
    }

}

08-05 20:54