private void AddDsl(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <DslContainer>();
     pluginRegistration.FindAndRegisterPlugins <IDslModelIndex>();
     builder.RegisterType <DslModelIndexByType>().As <IDslModelIndex>();      // This plugin is registered manually because FindAndRegisterPlugins does not scan core Rhetos dlls.
     builder.RegisterType <DslModelIndexByReference>().As <IDslModelIndex>(); // This plugin is registered manually because FindAndRegisterPlugins does not scan core Rhetos dlls.
 }
        //=====================================================================

        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);
                    }
                }
            }
        }
 private void AddCompiler(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <CodeBuilder>().As <ICodeBuilder>();
     builder.RegisterType <Compiler.CodeGenerator>().As <ICodeGenerator>();
     builder.RegisterType <SourceWriter>().As <ISourceWriter>().SingleInstance();
     pluginRegistration.FindAndRegisterPlugins <IConceptCodeGenerator>();
 }
 private static void AddCommandsProcessing(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <XmlDataTypeProvider>().As <IDataTypeProvider>().SingleInstance();
     builder.RegisterType <ProcessingEngine>().As <IProcessingEngine>();
     pluginRegistration.FindAndRegisterPlugins <ICommandData>();
     pluginRegistration.FindAndRegisterPlugins <ICommandImplementation>();
     pluginRegistration.FindAndRegisterPlugins <ICommandObserver>();
     pluginRegistration.FindAndRegisterPlugins <ICommandInfo>();
 }
        private void AddSecurity(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
        {
            builder.Register(context => context.Resolve <IConfiguration>().GetOptions <AppSecurityOptions>()).SingleInstance().PreserveExistingDefaults();
            builder.RegisterType <AuthorizationManager>().As <IAuthorizationManager>().InstancePerLifetimeScope();

            // Default user authentication and authorization components. Custom plugins may override it by registering their own interface implementations.
            builder.RegisterType <NullAuthorizationProvider>().As <IAuthorizationProvider>().PreserveExistingDefaults();

            // Cannot use FindAndRegisterPlugins on IUserInfo because each type should be manually registered with InstancePerLifetimeScope.
            pluginRegistration.FindAndRegisterPlugins <IAuthorizationProvider>();
            pluginRegistration.FindAndRegisterPlugins <IClaimProvider>();
        }
Example #6
0
 private void AddDsl(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <DslModel>().As <IDslModel>().SingleInstance();
     builder.RegisterType <ConceptMetadata>().SingleInstance();
     pluginRegistration.FindAndRegisterPlugins <IConceptMetadataExtension>();
     builder.RegisterType <DiskDslScriptLoader>().As <IDslScriptsProvider>().SingleInstance();
     builder.RegisterType <Tokenizer>().SingleInstance();
     builder.RegisterType <DslModelFile>().As <IDslModelFile>().SingleInstance();
     builder.RegisterType <DslParser>().As <IDslParser>();
     builder.RegisterType <MacroOrderRepository>().As <IMacroOrderRepository>();
     builder.RegisterType <InitializationConcept>().As <IConceptInfo>(); // This plugin is registered manually because FindAndRegisterPlugins does not scan core Rhetos dlls.
     pluginRegistration.FindAndRegisterPlugins <IConceptInfo>();
     pluginRegistration.FindAndRegisterPlugins <IConceptMacro>(typeof(IConceptMacro <>));
 }
        public void GenerateApplication()
        {
            _logger.Info("Loading plugins.");
            var stopwatch = Stopwatch.StartNew();

            var builder = CreateBuildComponentsContainer();

            using (var container = builder.Build())
            {
                var performanceLogger = container.Resolve <ILogProvider>().GetLogger("Performance." + GetType().Name);
                performanceLogger.Write(stopwatch, "Modules and plugins registered.");
                ContainerBuilderPluginRegistration.LogRegistrationStatistics("Rhetos build component registrations", container, _logProvider);

                container.Resolve <ApplicationGenerator>().ExecuteGenerators();
            }
        }
        //=====================================================================

        public void UpdateDatabase()
        {
            _logger.Info("Loading plugins.");
            var stopwatch = Stopwatch.StartNew();

            var builder = CreateDbUpdateComponentsContainer();

            using (var container = builder.Build())
            {
                var performanceLogger = container.Resolve <ILogProvider>().GetLogger("Performance." + GetType().Name);
                performanceLogger.Write(stopwatch, "Modules and plugins registered.");
                ContainerBuilderPluginRegistration.LogRegistrationStatistics("Generating application", container, _logProvider);

                container.Resolve <DatabaseDeployment>().UpdateDatabase();
            }
        }
 private void AddDsl(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <DslModel>().As <IDslModel>().SingleInstance();
     builder.RegisterType <ConceptMetadata>().SingleInstance();
     pluginRegistration.FindAndRegisterPlugins <IConceptMetadataExtension>();
     builder.RegisterType <DiskDslScriptLoader>().As <IDslScriptsProvider>().SingleInstance();
     builder.RegisterType <Tokenizer>().As <ITokenizer>();
     builder.RegisterType <DslParser>().As <IDslParser>();
     builder.RegisterType <DslModelFile>().As <IDslModelFile>().SingleInstance();
     builder.RegisterType <DslSyntaxFromPlugins>();
     builder.RegisterType <DslSyntaxFile>();
     builder.Register(context => context.Resolve <DslSyntaxFromPlugins>().CreateDslSyntax()).As <DslSyntax>().SingleInstance();
     builder.RegisterType <DslSyntaxFileGenerator>().As <IGenerator>();
     builder.RegisterType <DslDocumentationFile>();
     builder.RegisterType <DslDocumentationFileGenerator>().As <IGenerator>();
     builder.RegisterType <MacroOrderRepository>().As <IMacroOrderRepository>();
     builder.RegisterType <InitializationConcept>().As <IConceptInfo>(); // This plugin is registered manually because FindAndRegisterPlugins does not scan core Rhetos DLLs.
     pluginRegistration.FindAndRegisterPlugins <IConceptInfo>();
     pluginRegistration.FindAndRegisterPlugins <IConceptMacro>(typeof(IConceptMacro <>));
 }
        private void AddDatabaseGenerator(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
        {
            // Generating database model:

            builder.RegisterType <DatabaseModelDependencies>();
            builder.RegisterType <DatabaseModelBuilder>();
            builder.RegisterType <DatabaseModelFile>();
            builder.RegisterType <DatabaseModelGenerator>().As <IGenerator>();

            // Generating data migration from SQL scripts:

            pluginRegistration.FindAndRegisterPlugins <IConceptDataMigration>(typeof(IConceptDataMigration <>));
            builder.RegisterType <DataMigrationScriptsFile>().As <IDataMigrationScriptsFile>();
            builder.RegisterType <DataMigrationScriptsGenerator>().As <IGenerator>();

            // Generating data migration from plugins:

            pluginRegistration.FindAndRegisterPlugins <IConceptDatabaseDefinition>();
            builder.RegisterType <NullImplementation>().As <IConceptDatabaseDefinition>();
            builder.RegisterType <ConceptDataMigrationGenerator>().As <IGenerator>();
        }
 internal void LogRegistrationStatistics(string title, ILogProvider logProvider)
 {
     ContainerBuilderPluginRegistration.LogRegistrationStatistics(title, _lifetimeScope, logProvider);
 }
 private void AddPersistence(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <EntityFrameworkMappingGenerator>().As <IGenerator>();
     pluginRegistration.FindAndRegisterPlugins <IConceptMapping>(typeof(ConceptMapping <>));
 }
 private void AddUtilities(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     pluginRegistration.FindAndRegisterPlugins <ILocalizer>();
     builder.RegisterType <NoLocalizer>().As <ILocalizer>().SingleInstance().PreserveExistingDefaults();
 }
 private static void AddDsl(ContainerBuilder builder, ContainerBuilderPluginRegistration pluginRegistration)
 {
     builder.RegisterType <DslModelFile>().As <IDslModel>().SingleInstance();
     builder.RegisterType <ConceptMetadata>().SingleInstance();
     pluginRegistration.FindAndRegisterPlugins <IConceptMetadataExtension>();
 }