示例#1
0
 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());
 }
示例#2
0
        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();
            }
        }
示例#3
0
 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);
 }
示例#4
0
        private string GetHomePageSnippets()
        {
            var html = new StringBuilder();

            foreach (var snippet in _snippets.GetPlugins())
            {
                html.AppendLine(snippet.Html);
            }
            return(html.ToString());
        }
示例#5
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }