예제 #1
0
        private static void Configure(ISecurityProvider security, IConfigurationRoot configuration,
                                      string connectionstringName = "default", ILogger logger = null)
        {
            DWKitRuntime.LicensePath = configuration["DWKit:LicensePath"];
            DWKitRuntime.CheckLicense();

            #if (DEBUG)
            DWKitRuntime.UseMetadataCache = false;
            //CodeActionsCompiler.DebugMode = true;
            #elif (RELEASE)
            DWKitRuntime.UseMetadataCache = true;
            #endif

            if (!string.IsNullOrWhiteSpace(configuration["DWKit:StoreSchemesInMetadataFolder"]))
            {
                DWKitRuntime.StoreSchemesInMetadataFolder = bool.Parse(configuration["DWKit:StoreSchemesInMetadataFolder"]);
            }

            DWKitRuntime.ConnectionStringData = configuration[$"ConnectionStrings:{connectionstringName}"];
            DWKitRuntime.DbProvider           = AutoDetectProvider(configuration, logger);
            DWKitRuntime.Security             = security;
            DWKitRuntime.QueryInterceptor     = GetQueryInterceptor();

            var    path         = configuration["DWKit:MetadataPath"];
            string metadataPath = null;

            if (string.IsNullOrEmpty(path))
            {
                path         = "Metadata/metadata.json";
                metadataPath = "Metadata";
            }
            else
            {
                metadataPath = Path.GetDirectoryName(path);
            }

            DWKitRuntime.Metadata = new DefaultMetadataProvider(path, $"{metadataPath}/Forms", $"{metadataPath}/Localization", workflowFolder: $"{metadataPath}/Workflow");

            if ("true".Equals(configuration["DWKit:BlockMetadataChanges"], StringComparison.InvariantCultureIgnoreCase))
            {
                DWKitRuntime.Metadata.BlockMetadataChanges = true;
            }

            if (!string.IsNullOrWhiteSpace(configuration["DWKit:ResourceFolder"]))
            {
                DWKitRuntime.Metadata.ResourceFolder = configuration["DWKit:ResourceFolder"];
            }

            if (!string.IsNullOrWhiteSpace(configuration["DWKit:CodeActionsDebugMode"]))
            {
                DWKitRuntime.CodeActionsDebugMode = bool.Parse(configuration["DWKit:CodeActionsDebugMode"]);
            }

            CodeActionsCompiler.RegisterAssembly(typeof(WorkflowRuntime).Assembly);
            //It is necessary to have this assembly for compile code with dynamic
            CodeActionsCompiler.RegisterAssembly(typeof(Microsoft.CSharp.RuntimeBinder.Binder).Assembly);
            DWKitRuntime.CompileAllCodeActionsAsync().Wait();
            DWKitRuntime.ServerActions.RegisterUsersProvider("filters", new Filters());
            DWKitRuntime.ServerActions.RegisterUsersProvider("triggers", new Triggers());
            DWKitRuntime.ServerActions.RegisterUsersProvider("actions", new ServerActions());

            //Forcing the creation of a WF runtime to initialize timers and the Flow.
            try
            {
                WorkflowInit.ForceInit();
            }
            catch (Exception e)
            {
                if (Debugger.IsAttached)
                {
                    var info         = ExceptionUtils.GetExceptionInfo(e);
                    var errorBuilder = new StringBuilder();
                    errorBuilder.AppendLine("Workflow engine start failed.");
                    errorBuilder.AppendLine($"Message: {info.Message}");
                    errorBuilder.AppendLine($"Exceptions: {info.Exeptions}");
                    errorBuilder.Append($"StackTrace: {info.StackTrace}");
                    Debug.WriteLine(errorBuilder);
                }
            }


            //Init plugins
            DWKitRuntime.InitPlugins().Wait();
        }