Throw more descriptive exception when service isn't found
This commit is contained in:
@@ -38,7 +38,7 @@ object DynamicComponentDescriptor : ValueDescriptor {
|
||||
override fun toString(): String = "Dynamic"
|
||||
}
|
||||
|
||||
class StorageComponentContainer(id: String, parent: StorageComponentContainer? = null) : ComponentContainer, ComponentProvider, Closeable {
|
||||
class StorageComponentContainer(private val id: String, parent: StorageComponentContainer? = null) : ComponentContainer, ComponentProvider, Closeable {
|
||||
val unknownContext: ComponentResolveContext by lazy {
|
||||
val parentContext = parent?.let { ComponentResolveContext(it, DynamicComponentDescriptor) }
|
||||
ComponentResolveContext(this, DynamicComponentDescriptor, parentContext)
|
||||
@@ -104,6 +104,8 @@ class StorageComponentContainer(id: String, parent: StorageComponentContainer? =
|
||||
val args = constructorBinding.argumentDescriptors.map { it.getValue() }.toTypedArray()
|
||||
return constructorBinding.constructor.newInstance(*args) as T
|
||||
}
|
||||
|
||||
override fun toString() = "Container $id"
|
||||
}
|
||||
|
||||
fun StorageComponentContainer.registerSingleton(klass: Class<*>): StorageComponentContainer {
|
||||
|
||||
@@ -39,7 +39,7 @@ fun <T : Any> ComponentProvider.tryGetService(request: Class<T>): T? {
|
||||
}
|
||||
|
||||
fun <T : Any> ComponentProvider.getService(request: Class<T>): T {
|
||||
return tryGetService(request) ?: throw IllegalArgumentException("Unresolved service: $request")
|
||||
return tryGetService(request) ?: throw UnresolvedServiceException(this, request)
|
||||
}
|
||||
|
||||
fun StorageComponentContainer.useInstance(instance: Any) {
|
||||
@@ -49,3 +49,6 @@ fun StorageComponentContainer.useInstance(instance: Any) {
|
||||
inline operator fun <reified T : Any> ComponentProvider.getValue(thisRef: Any?, desc: KProperty<*>): T {
|
||||
return getService(T::class.java)
|
||||
}
|
||||
|
||||
class UnresolvedServiceException(container: ComponentProvider, request: Class<*>) :
|
||||
IllegalArgumentException("Unresolved service: $request in $container")
|
||||
Reference in New Issue
Block a user