installModule method
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.");
}
}
}
}
}