+inline fun <reified T> key(): Key<T> = Key.get(object : TypeLiteral<T>() {})
+inline fun <reified T> key(annotation: Annotation): Key<T> = Key.get(object : TypeLiteral<T>() {}, annotation)
+
+inline fun <reified T : Any> Injector.getInstance(annotation: Annotation? = null): T = annotation
+ ?.let { getInstance(Key.get(object : TypeLiteral<T>() {}, it)) }
+ ?: getInstance(Key.get(object : TypeLiteral<T>() {}))
+
+
+inline fun <reified T : Any> Injector.verifySingletonInstance(annotation: Annotation? = null) {
+ val firstInstance = getInstance<T>(annotation)
+ val secondInstance = getInstance<T>(annotation)
+ assertThat(firstInstance, sameInstance(secondInstance))
+}