在attachBaseContext中使用注入匕首的对象

时间:2018-06-06 09:31:51

标签: android dagger-2

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

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

编辑:

好的,所以我认为问题在于我试图使用匕首太多,我认为在这种情况下它根本不适合。在每项活动的attachBaseContext中,我必须更新区域设置,并将此更新逻辑提取到LocaleManager,需要访问SharedPreferences实例和我Context进入attachBaseContextSharedPreferences实例已经在AppModule中,但我仍然无法@Inject attachBaseContext之前的活动,因为活动的注入发生在{{1}之后}}

1 个答案:

答案 0 :(得分:-1)

只要您可以访问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)
    }

}