From b0a57eb1482af281ae9ec5683eb7fc7739157481 Mon Sep 17 00:00:00 2001 From: axeleron007 Date: Thu, 8 Jul 2021 13:22:49 +0300 Subject: [PATCH] Code refactoring Code refactoring --- .../Extensions/ElsaOptionBuilderExtensions.cs | 65 ++++++++++++++----- src/core/Elsa.Core/FeatureOptions.cs | 3 +- .../server/Elsa.Samples.Server.Host/README.md | 2 +- .../Elsa.Samples.Server.Host/appsettings.json | 2 +- 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/core/Elsa.Core/Extensions/ElsaOptionBuilderExtensions.cs b/src/core/Elsa.Core/Extensions/ElsaOptionBuilderExtensions.cs index 9467dcea9..86a3ece13 100644 --- a/src/core/Elsa.Core/Extensions/ElsaOptionBuilderExtensions.cs +++ b/src/core/Elsa.Core/Extensions/ElsaOptionBuilderExtensions.cs @@ -54,19 +54,12 @@ namespace Elsa var key = feature.Key.Replace($"{elsaFeaturesSection}:", string.Empty); enabledFeatures.Add(key); - var hasFramework = !string.IsNullOrWhiteSpace(featureOptions.Framework); - var hasConnection = !string.IsNullOrWhiteSpace(featureOptions.ConnectionStringIdentifier); + if (featureOptions.Items == null) continue; - if (hasFramework) + foreach (var item in featureOptions.Items) { - enabledFeatures.Add($"{key}:{featureOptions.Framework}"); - } - - if (hasConnection) - { - enabledFeatures.Add(hasFramework - ? $"{key}:{featureOptions.Framework}:{featureOptions.ConnectionStringIdentifier}" - : $"{key}:{featureOptions.ConnectionStringIdentifier}"); + key += $":{item.Value}"; + enabledFeatures.Add(key); } } @@ -75,20 +68,58 @@ namespace Elsa private static FeatureOptions ParseFeatureFlag(IConfiguration configuration, string feature) { - var options = new FeatureOptions(); + var featureOptions = new FeatureOptions(); if (configuration.GetSection($"{feature}:Enabled").Exists()) - { - configuration.GetSection(feature).Bind(options); - return options; + { + var featureItems = configuration.GetSection($"{feature}").AsEnumerable(); + + ParseFeatureItems(feature, featureOptions, featureItems); + ParseFeatureOptions(configuration, feature, featureOptions); + + return featureOptions; } if (!feature.EndsWith(":Enabled")) { bool.TryParse(configuration.GetValue($"{feature}"), out var enabled); - options.Enabled = enabled; + featureOptions.Enabled = enabled; + } + return featureOptions; + } + + private static void ParseFeatureItems(string feature, FeatureOptions featureOptions, IEnumerable> featureItems) + { + featureOptions.Items = new Dictionary(); + + foreach (var featureItem in featureItems) + { + if (featureItem.Value == null) continue; + + var itemKey = featureItem.Key.Replace($"{feature}:", string.Empty); + + if (itemKey.Contains(":")) continue; + + if (itemKey == "Enabled") + { + bool.TryParse(featureItem.Value, out var enabled); + featureOptions.Enabled = enabled; + } + else + { + featureOptions.Items.Add(itemKey, featureItem.Value); + } + } + } + + private static void ParseFeatureOptions(IConfiguration configuration, string feature, FeatureOptions featureOptions) + { + if (configuration.GetSection($"{feature}:Options").Exists()) + { + var options = new Dictionary(); + configuration.GetSection($"{feature}:Options").Bind(options); + featureOptions.Options = options; } - return options; } private static IEnumerable GetAssemblies(IEnumerable assemblyMarkerTypes) => assemblyMarkerTypes.Select(x => x.Assembly).Distinct(); diff --git a/src/core/Elsa.Core/FeatureOptions.cs b/src/core/Elsa.Core/FeatureOptions.cs index 26f7085ab..8be485f63 100644 --- a/src/core/Elsa.Core/FeatureOptions.cs +++ b/src/core/Elsa.Core/FeatureOptions.cs @@ -5,8 +5,7 @@ namespace Elsa public class FeatureOptions { public bool Enabled { get; set; } - public string? Framework { get; set; } - public string? ConnectionStringIdentifier { get; set; } + public Dictionary? Items { get; set; } public Dictionary? Options { get; set; } } } diff --git a/src/samples/server/Elsa.Samples.Server.Host/README.md b/src/samples/server/Elsa.Samples.Server.Host/README.md index e453e07c1..2a4ac4aa7 100644 --- a/src/samples/server/Elsa.Samples.Server.Host/README.md +++ b/src/samples/server/Elsa.Samples.Server.Host/README.md @@ -1,6 +1,6 @@ ### Configure persistence for Elsa Core in the appsettings.json -A simple way to enable a feature without persitence: +A simple way to enable a feature without persistence: ``` "Elsa": { diff --git a/src/samples/server/Elsa.Samples.Server.Host/appsettings.json b/src/samples/server/Elsa.Samples.Server.Host/appsettings.json index 476ea05df..42ba89f69 100644 --- a/src/samples/server/Elsa.Samples.Server.Host/appsettings.json +++ b/src/samples/server/Elsa.Samples.Server.Host/appsettings.json @@ -20,7 +20,7 @@ "Elsa": { "Features": { "DefaultPersistence": { - "Enabled": true, + "Enabled": "true", "Framework": "EntityFrameworkCore", "ConnectionStringIdentifier": "Sqlite" },