//=====================================================================

        public void InitializeGeneratedApplication(IRhetosRuntime rhetosRuntime)
        {
            // Creating a new container builder instead of using builder.Update(), because of severe performance issues with the Update method.

            _logger.Info("Loading generated plugins.");
            var stopwatch = Stopwatch.StartNew();

            using (var container = rhetosRuntime.BuildContainer(_logProvider, _configuration, AddAppInitializationComponents))
            {
                // EfMappingViewsInitializer is manually executed before other initializers because of performance issues.
                // It is needed for most of the initializer to run, but lazy initialization of EfMappingViews on first DbContext usage
                // is not a good option because of significant hash check duration (it would not be applicable in run-time).
                _logger.Info("Initializing EfMappingViews.");
                var efMappingViewsInitializer = container.Resolve <EfMappingViewsInitializer>();
                efMappingViewsInitializer.Initialize();

                var performanceLogger = container.Resolve <ILogProvider>().GetLogger("Performance." + GetType().Name);
                var initializers      = ApplicationInitialization.GetSortedInitializers(container);

                performanceLogger.Write(stopwatch, "New modules and plugins registered.");
                ContainerBuilderPluginRegistration.LogRegistrationStatistics("Initializing application", container, _logProvider);

                if (!initializers.Any())
                {
                    _logger.Info("No server initialization plugins.");
                }
                else
                {
                    foreach (var initializer in initializers)
                    {
                        ApplicationInitialization.ExecuteInitializer(container, initializer);
                    }
                }
            }
        }
示例#2
0
        /// <param name="applicationFolder">
        /// Folder where the Rhetos configuration file is located (see <see cref="RhetosAppEnvironment.ConfigurationFileName"/>),
        /// or any subfolder.
        /// </param>
        public static Host Find(string applicationFolder, ILogProvider logProvider)
        {
            var            configurationFolder   = FindConfiguration(applicationFolder);
            string         rhetosRuntimePath     = LoadRhetosRuntimePath(configurationFolder, logProvider);
            IRhetosRuntime rhetosRuntimeInstance = CreateRhetosRuntimeInstance(logProvider, rhetosRuntimePath);

            return(new Host
            {
                RhetosRuntime = rhetosRuntimeInstance,
                ConfigurationFolder = configurationFolder,
            });
        }