public DslContainer(ILogProvider logProvider, IPluginsContainer <IDslModelIndex> dslModelIndexPlugins) { _performanceLogger = logProvider.GetLogger("Performance." + GetType().Name); _logger = logProvider.GetLogger("DslContainer"); _dslModelIndexes = dslModelIndexPlugins.GetPlugins().ToList(); _dslModelIndexesByType = _dslModelIndexes.ToDictionary(index => index.GetType()); }
public void ExecuteGenerators() { _filesUtility.EmptyDirectory(_buildEnvironment.GeneratedAssetsFolder); _filesUtility.SafeCreateDirectory(_buildEnvironment.CacheFolder); // Cache is not deleted between builds. if (!string.IsNullOrEmpty(_buildEnvironment.GeneratedSourceFolder)) { _filesUtility.SafeCreateDirectory(_buildEnvironment.GeneratedSourceFolder); // Obsolete source files will be cleaned later. Keeping the existing files to allowing source change detection in Visual Studio. } CheckDslModelErrors(); var generators = _generatorsContainer.GetPlugins().ToArray(); var job = PrepareGeneratorsJob(generators); _logger.Trace(() => $"Starting parallel execution of {generators.Length} generators."); if (_buildOptions.MaxExecuteGeneratorsParallelism > 0) { _logger.Info(() => $"Using max {_buildOptions.MaxExecuteGeneratorsParallelism} degree of parallelism from configuration."); } var sw = Stopwatch.StartNew(); job.RunAllTasks(_buildOptions.MaxExecuteGeneratorsParallelism); _performanceLogger.Write(sw, $"Executed {generators.Length} generators."); if (!string.IsNullOrEmpty(_buildEnvironment.GeneratedSourceFolder)) { _sourceWriter.CleanUp(); } }
public DslContainer(ILogProvider logProvider, IPluginsContainer <IDslModelIndex> dslModelIndexPlugins, IConfiguration configuration) { _performanceLogger = logProvider.GetLogger("Performance"); _logger = logProvider.GetLogger("DslContainer"); _dslModelIndexes = dslModelIndexPlugins.GetPlugins().ToList(); _dslModelIndexesByType = _dslModelIndexes.ToDictionary(index => index.GetType()); _sortConceptsMethod = configuration.GetEnum("CommonConcepts.Debug.SortConcepts", SortConceptsMethod.None); }
private string GetHomePageSnippets() { var html = new StringBuilder(); foreach (var snippet in _snippets.GetPlugins()) { html.AppendLine(snippet.Html); } return(html.ToString()); }
private void GenerateCaptionValues() { var sw = Stopwatch.StartNew(); _captionsValue = new Dictionary <string, string>(); var plugins = _plugins.GetPlugins().OrderBy(p => p.Order).ToList(); foreach (var plugin in plugins) { plugin.UpdateCaption(_dslModel, _captionsValue); } _performanceLogger.Write(sw, "CaptionsValueGenerator.GenerateCaptionValues"); }
private IList <IServerInitializer> GetSortedInitializers() { // The plugins in the container are sorted by their dependencies defined in ExportMetadata attribute (static typed): var initializers = _initializersContainer.GetPlugins(); // Additional sorting by loosely-typed dependencies from the Dependencies property: var initNames = initializers.Select(init => init.GetType().FullName).ToList(); var initDependencies = initializers.SelectMany(init => (init.Dependencies ?? new string[0]).Select(x => Tuple.Create(x, init.GetType().FullName))); Rhetos.Utilities.Graph.TopologicalSort(initNames, initDependencies); var sortedInitializers = initializers.ToArray(); Graph.SortByGivenOrder(sortedInitializers, initNames.ToArray(), init => init.GetType().FullName); return(sortedInitializers); }
private IList <IGenerator> GetSortedGenerators() { // The plugins in the container are sorted by their dependencies defined in ExportMetadata attribute (static typed): var generators = _generatorsContainer.GetPlugins().ToArray(); // Additional sorting by loosely-typed dependencies from the Dependencies property: var generatorNames = generators.Select(GetGeneratorName).ToList(); var dependencies = generators.Where(gen => gen.Dependencies != null) .SelectMany(gen => gen.Dependencies.Select(dependsOn => Tuple.Create(dependsOn, GetGeneratorName(gen)))) .ToList(); Graph.TopologicalSort(generatorNames, dependencies); foreach (var missingDependency in dependencies.Where(dep => !generatorNames.Contains(dep.Item1))) { _deployPackagesLogger.Info($"Missing dependency '{missingDependency.Item1}' for application generator '{missingDependency.Item2}'."); } Graph.SortByGivenOrder(generators, generatorNames, GetGeneratorName); return(generators); }
private Dictionary <Type, IConceptMetadataExtension> GetPluginsForMetadataType(Type metadataInterface, Type metadataGenericInterface) { var metadataByConceptType = new Dictionary <Type, IConceptMetadataExtension>(); foreach (var plugin in _plugins.GetPlugins().Where(x => metadataInterface.IsInstanceOfType(x))) { var pluginType = plugin.GetType(); var pluginInterface = pluginType.GetInterfaces().Single(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IConceptMetadataExtension <>)); var conceptType = pluginInterface.GetGenericArguments().Single(); if (metadataByConceptType.ContainsKey(conceptType)) { throw new FrameworkException($"There are multiple implementations of {metadataGenericInterface.Name} for type {conceptType.Name}:" + $" '{metadataByConceptType[conceptType].GetType()}' and '{pluginType}'."); } metadataByConceptType.Add(conceptType, plugin); } return(metadataByConceptType); }