fromPlex<T> function

T fromPlex<T>({
  1. String? tag,
  2. dynamic parm,
})

Implementation

T fromPlex<T>({String? tag, dynamic parm}) {
  final key = '${T}${tag ?? ''}';
  if (_resolutionStack.contains(key)) {
    throw PlexCircularDependencyError([..._resolutionStack, key]);
  }
  _resolutionStack.add(key);
  try {
    var elements = _injectors.whereType<_PlexInjector<T>>().cast<_PlexInjector>().toList();
    if (tag != null) {
      elements = elements.where((element) => element.tag == tag).toList();
    } else {
      elements = elements.where((element) => element.tag == null).toList();
    }
    if (elements.isEmpty) {
      throw Exception("No Dependency Provided\n\nPlease use injectSingleton(...), injectSingletonLazy(...) or injectFactory(...)\n");
    }
    return elements.first.getValue(parm: parm);
  } finally {
    _resolutionStack.remove(key);
  }
}