Возникли проблемы с добавлением sharedPreferences и sharedPrefferencesEditor в модуль Koin - PullRequest
0 голосов
/ 17 января 2019

Я недавно узнал о Коине. Я пытался перенести свой текущий проект из Dagger в Koin. При этом я столкнулся с проблемой добавления в действия sharedPreferences и редактора sharedPreferences .

Ниже приведен код, который я использовал в Кинжал для добавления редактора sharedPreferences и sharedPreferences ->

    @Provides
    @AppScope
    fun getSharedPreferences(context: Context): SharedPreferences =
            context.getSharedPreferences("default", Context.MODE_PRIVATE)

    @SuppressLint("CommitPrefEdits")
    @Provides
    @AppScope
    fun getSharedPrefrencesEditor(context: Context): SharedPreferences.Editor =
            getSharedPreferences(context).edit()

Я пытался преобразовать вышеупомянутый код в Koin вот так ->

val appModule = module {

    val ctx by lazy{ androidApplication() }

    single {
        ctx.getSharedPreferences("default", Context.MODE_PRIVATE)
    }

    single {
        getSharedPreferences(ctx).edit()
    }
}

Я также пытался реализовать это таким образом ->

val appModule = module {

        single {
            androidApplication().getSharedPreferences("default", Context.MODE_PRIVATE)
        }

        single {
            getSharedPreferences(androidApplication()).edit()
        }
    }

Теперь я внедряю зависимости в моей деятельности следующим образом ->

val sharedPreferences: SharedPreferences by inject()

val sharedPreferencesEditor: SharedPreferences.Editor by inject()

Но как только я запускаю свое приложение и пытаюсь их использовать, я не могу ни читать, ни записывать ничего в настройки.

Я немного смущен тем, что не так с кодом. Пожалуйста, помогите мне разобраться в этом.

1 Ответ

0 голосов
/ 28 января 2019

Я нашел способ справиться с этим. Надеюсь, это поможет кому-то, кто ищет ту же проблему.

Вот решение проблемы:

Определение модуля koin будет таким ->

 val appModule = module {

    single{
        getSharedPrefs(androidApplication())
    }

    single<SharedPreferences.Editor> {
        getSharedPrefs(androidApplication()).edit()
    }
 }

fun getSharedPrefs(androidApplication: Application): SharedPreferences{
    return  androidApplication.getSharedPreferences("default",  android.content.Context.MODE_PRIVATE)
}

Просто чтобы было ясно, что приведенный выше код находится в файле modules.kt

Теперь вы можете легко внедрить созданные экземпляры, такие как ->

private val sharedPreferences: SharedPreferences by inject()

private val sharedPreferencesEditor: SharedPreferences.Editor by inject()

Убедитесь, что вышеприведенные экземпляры val вместо var , иначе метод inject () не будет работать, так как это ленивая инъекция.

...