21 package org.matsim.core.modal;
23 import java.lang.annotation.Annotation;
24 import java.util.function.Function;
26 import jakarta.inject.Inject;
28 import com.google.inject.Injector;
29 import com.google.inject.Key;
30 import com.google.inject.Provider;
31 import com.google.inject.TypeLiteral;
32 import com.google.inject.name.Names;
38 public static <M extends Annotation, T> Provider<T>
createProvider(String mode,
40 return new Provider<>() {
42 private Injector injector;
46 return delegate.apply(
new InstanceGetter<>(mode, modalAnnotationCreator, injector));
62 public <T> T
get(Class<T> type) {
63 return injector.getInstance(type);
66 public <T> T
get(Key<T> key) {
67 return injector.getInstance(key);
70 public <T> T
get(TypeLiteral<T> typeLiteral) {
71 return injector.getInstance(Key.get(typeLiteral));
74 public <T> T getModal(Class<T> type) {
75 return injector.getInstance(modalAnnotationCreator.
key(type, mode));
78 public <T> T getModal(TypeLiteral<T> typeLiteral) {
79 return injector.getInstance(modalAnnotationCreator.
key(typeLiteral, mode));
82 public <T> T getNamed(Class<T> type, String name) {
83 return injector.getInstance(Key.get(type, Names.named(name)));
86 public <T> T getNamed(TypeLiteral<T> typeLiteral, String name) {
87 return injector.getInstance(Key.get(typeLiteral, Names.named(name)));
91 public static abstract class AbstractProvider<M
extends Annotation, T> implements Provider<T> {
103 protected <I> I getModalInstance(Class<I> type) {
104 return injector.getInstance(modalAnnotationCreator.
key(type, mode));
107 protected <I> I getModalInstance(TypeLiteral<I> typeLiteral) {
108 return injector.getInstance(modalAnnotationCreator.
key(typeLiteral, mode));
111 protected <I> Provider<I> getModalProvider(Class<I> type) {
112 return injector.getProvider(modalAnnotationCreator.
key(type, mode));
final ModalAnnotationCreator< M > modalAnnotationCreator
final ModalAnnotationCreator< M > modalAnnotationCreator
static< M extends Annotation, T > Provider< T > createProvider(String mode, ModalAnnotationCreator< M > modalAnnotationCreator, Function< InstanceGetter< M >, T > delegate)
InstanceGetter(String mode, ModalAnnotationCreator< M > modalAnnotationCreator, Injector injector)
AbstractProvider(String mode, ModalAnnotationCreator< M > modalAnnotationCreator)
default< T > Key< T > key(Class< T > type, String mode)