Esempio n. 1
0
        public static ISemanticNetwork WithModules(this ISemanticNetwork semanticNetwork, ICollection <IExtensionModule> modules)
        {
            var modulesToApply = new List <IExtensionModule>(modules);

            while (modulesToApply.Count > 0)
            {
                var applied = new List <IExtensionModule>();
                foreach (var module in modulesToApply)
                {
                    if (semanticNetwork.GetMissingDependencies(module).Count == 0)
                    {
                        module.AttachTo(semanticNetwork);
                        applied.Add(module);
                    }
                }

                if (applied.Count > 0)
                {
                    modulesToApply.RemoveAll(applied.Contains);
                }
                else
                {
                    throw new ModuleException(String.Join("; ", modulesToApply.Select(m => m.Name)), $"Impossible to apply {modulesToApply.Count} modules because they have unresolved dependencies.");
                }
            }

            return(semanticNetwork);
        }
Esempio n. 2
0
        public void AttachTo(ISemanticNetwork semanticNetwork)
        {
            if (semanticNetwork.Modules.ContainsKey(Name))
            {
                return;
            }

            var missingDependencies = semanticNetwork.GetMissingDependencies(this);

            if (missingDependencies.Count > 0)
            {
                throw new ModuleException(Name, $"Impossible to apply \"{Name}\" module. Required modules \"{String.Join("\", \"", missingDependencies)}\" are not loaded.");
            }

            if (!IsMetadataRegistered)
            {
                RegisterMetadata();
            }

            Attach(semanticNetwork);

            semanticNetwork.Modules[Name] = this;
        }