installModule method

void installModule(
  1. BaseDimeModule module, {
  2. bool override = false,
})

Installs a module into this scope. Optional override allows to update current's scope instances if same are defined in a module

Implementation

void installModule(BaseDimeModule module, {bool override = false}) {
  _modules.add(module);
  module.updateInjections();
  if (override) {
    // override this scope values
    for (var newModuleType in module.injectMap.keys) {
      for (var currentModule in _modules) {
        if (currentModule != module &&
            currentModule.injectMap.containsKey(newModuleType)) {
          // todo  Do we need to resolve duplicate per tag?
          // cleanup removed factory
          Closable.closeWith(currentModule.injectMap[newModuleType]);
          currentModule.injectMap.remove(newModuleType);
        }
      }
    }
  } else {
    // detect duplicate for the type
    for (var newModuleType in module.injectMap.keys) {
      for (var currentModule in _modules) {
        if (currentModule != module &&
            currentModule.injectMap.containsKey(newModuleType)) {
          // todo Do we need resolve duplicates per tag?
          // found duplicate
          throw DimeException.message("Found duplicate type: $newModuleType "
              "inside current scope modules.");
        }
      }
    }
  }
}