diff options
author | Linnea Gräf <nea@nea.moe> | 2024-12-15 19:31:46 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-12-15 19:31:46 +0100 |
commit | a2f73de90fb9c9d0ea7a5e7e9e6b9e445a8094ee (patch) | |
tree | 4b612c6451c695822885c29e9f497e2826dc3bbd /src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt | |
parent | 0a4cf1fbcc897462f31aaadc5c868d12d13e1abb (diff) | |
download | LocalTransactionLedger-a2f73de90fb9c9d0ea7a5e7e9e6b9e445a8094ee.tar.gz LocalTransactionLedger-a2f73de90fb9c9d0ea7a5e7e9e6b9e445a8094ee.tar.bz2 LocalTransactionLedger-a2f73de90fb9c9d0ea7a5e7e9e6b9e445a8094ee.zip |
refactor: Move DI to its own package
Diffstat (limited to 'src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt b/src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt deleted file mode 100644 index 98d1bbc..0000000 --- a/src/main/kotlin/moe/nea/ledger/utils/DIProvider.kt +++ /dev/null @@ -1,51 +0,0 @@ -package moe.nea.ledger.utils - -import java.lang.reflect.AnnotatedElement -import java.lang.reflect.Constructor - -fun interface DIProvider<T : Any> : BaseDIProvider<T, Unit> { - override fun provideWithContext(di: DI, context: Unit): T { - return provide(di) - } - - override fun createContext(element: AnnotatedElement) { - } - - override fun createEmptyContext() { - } - - fun provide(di: DI): T - - companion object { - - fun <T : Any> fromInjectableClass(clazz: Class<T>): DIProvider<T> { - @Suppress("UNCHECKED_CAST") - val cons = (clazz.constructors.find { it.getAnnotation(Inject::class.java) != null } - ?: clazz.constructors.find { it.parameterCount == 0 } - ?: error("Could not find DI injection entrypoint for class $clazz")) - as Constructor<out T> - return DIProvider { di -> - val typArgs = cons.parameters.map { - di.provide(it.type, it) - }.toTypedArray() - val instance = cons.newInstance(*typArgs) - for (it in clazz.fields) { - if (it.getAnnotation(Inject::class.java) == null) continue - it.set(instance, di.provide(it.type, it)) - } - instance - } - } - - fun <T : Any> singeleton(value: T): DIProvider<T> { - return DIProvider { _ -> value } - } - } - -} - -interface BaseDIProvider<T : Any, C> { - fun createContext(element: AnnotatedElement): C - fun provideWithContext(di: DI, context: C): T - fun createEmptyContext(): C -} |