addSingle<T> method

void addSingle<T>(
  1. T instance, {
  2. String? tag,
})

Will add instance to the module, if T is defined in

Implementation

void addSingle<T>(T instance, {String? tag}) {
  if (tag == null) {
    if (injectMap.containsKey(T)) {
      Closable.closeWith(injectMap[T]);
    }
    injectMap[T] = SingleInstanceFactory<T>(instance);
  } else {
    var instanceFactory = injectMap[T];
    if (instanceFactory == null) {
      instanceFactory = SingleByTagInstanceFactory<T>();
      injectMap[T] = instanceFactory;
    }
    if (instanceFactory is SingleInjectFactory<T>) {
      // remove from single ad make it taggable factory
      var oldSingleInjectFactory = instanceFactory;
      instanceFactory = SingleByTagInstanceFactory<T>();
      _injectMap[T] = instanceFactory;
      if (oldSingleInjectFactory.localSingleton != null) {
        final localSingleton = oldSingleInjectFactory.localSingleton;
        if (localSingleton != null) {
          (instanceFactory as SingleByTagInstanceFactory<T>)
              .put(InjectTagFactory.defaultTag, localSingleton);
        }
      }
      (instanceFactory as SingleByTagInstanceFactory<T>).put(tag, instance);
    }
    if (instanceFactory is SingleByTagInstanceFactory<T>) {
      instanceFactory.put(tag, instance);
    }
  }
}