android - 如何使用 insert-koin 在内容提供者中注入(inject)数据存储库实例

标签 android dependency-injection android-contentprovider koin

面临的问题是在 AppModule 中插入 ContentProvider。

我的应用级模块是

module {
        single { TinyDB.getInstance(get()) }
        single { DataRepository(get()) }
        viewModel { HomeViewModel(get()) }
    }

我不知道如何在模块中使用 ContentProvider

我试过代码

val dataRepo = inject(DataRepository::class.java) 

这在我的内容提供者中,但在此之后我的应用程序开始崩溃 和 logcat 显示错误消息

    java.lang.RuntimeException: Unable to get provider wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider: java.lang.IllegalStateException: StandAloneContext Koin instance is null
        at android.app.ActivityThread.installProvider(ActivityThread.java:5562)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5154)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5094)
        at android.app.ActivityThread.access$1600(ActivityThread.java:177)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5942)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
     Caused by: java.lang.IllegalStateException: StandAloneContext Koin instance is null
        at org.koin.standalone.StandAloneContext.getKoin(StandAloneContext.kt:68)
        at org.koin.standalone.KoinComponentKt.getKoinContext(KoinComponent.kt:42)
        at org.koin.standalone.KoinComponentKt.access$getKoinContext(KoinComponent.kt:1)
        at org.koin.standalone.KoinComponent$DefaultImpls.getKoin(KoinComponent.kt:36)
        at wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider.getKoin(StickerContentProvider.kt:27)
        at wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider.<init>(StickerContentProvider.kt:481)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1650)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5547)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5154) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5094) 
        at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:145) 
        at android.app.ActivityThread.main(ActivityThread.java:5942) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at 

最佳答案

Content Provider Initialise 在 Application() 类中的 onCreate() 方法之前,我已经从 Application() 类中的 attachBaseContext() 方法调用了 startKoin,在我的 ContentProvider 类中实现了 KoinComponent 并使用它在 ContentProvider 中注入(inject)数据存储库

 var dataRepo = inject<DataRepository>()

注入(inject)代码

inline fun <reified T : Any> inject(name: String = "", scope: Scope? = 
null, noinline parameters: ParameterDefinition = 
emptyParameterDefinition()) = lazy { get<T>(name, scope, parameters) }

inline fun <reified T : Any> get(name: String = "", scope: Scope? = 
null, noinline parameters: ParameterDefinition = e . 
mptyParameterDefinition()): T = getKoin().get(name, scope, parameters)
//
fun getKoin(): KoinContext = 
(org.koin.standalone.StandAloneContext.koinContext as KoinContext)

关于android - 如何使用 insert-koin 在内容提供者中注入(inject)数据存储库实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003069/

相关文章:

Android:如何在 BaseAdapter 类中创建应用程序类对象

安卓NDK。从 .PVR 文件加载 ETC1 压缩纹理

java - CursorAdapter 奇怪的行为

.net - 是否有类似 Ninject 提供程序的 Autofac 提供程序?

Android:微调器在数据集更改后不更新

java - PrintWriter 和 DataOutputStream 有什么区别?

java - 使用 Dagger 并拥有基类时出现错误

c# - 解决 Unity 中的依赖关系

android - 带有内容提供者的小部件;无法使用 ReadPermission?

Android 获取联系人到应用程序中