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(); }