diff --git a/Toolkit.Foundation/Component.cs b/Toolkit.Foundation/Component.cs index ef0fa11..8e8ba85 100644 --- a/Toolkit.Foundation/Component.cs +++ b/Toolkit.Foundation/Component.cs @@ -22,7 +22,7 @@ public class Component : return factory.Create(builder); } - public IComponentBuilder Configure(string? name = null, + public IComponentBuilder Configure(string name, Action? builderDelegate = null) { if (builderDelegate is not null) @@ -33,5 +33,29 @@ public class Component : return Configuring(builder); } + public IComponentBuilder Configure(Action? builderDelegate = null) + { + if (builderDelegate is not null) + { + builderDelegate(builder); + } + + return Configuring(builder); + } + + public IComponentBuilder Configure(string name, + TConfiguration? configuration = null, + Action? builderDelegate = null) + where TConfiguration : class, new() + { + if (builderDelegate is not null) + { + builderDelegate(builder); + } + + builder.AddConfiguration(name, configuration); + return Configuring(builder); + } + public virtual IComponentBuilder Configuring(IComponentBuilder builder) => builder; } \ No newline at end of file diff --git a/Toolkit.Foundation/ComponentFactory.cs b/Toolkit.Foundation/ComponentFactory.cs index cd43e45..2019c77 100644 --- a/Toolkit.Foundation/ComponentFactory.cs +++ b/Toolkit.Foundation/ComponentFactory.cs @@ -16,7 +16,7 @@ public class ComponentFactory(IServiceProvider provider, { if (provider.GetRequiredService() is TComponent component) { - IComponentBuilder builder = component.Configure(name, builderDelegate); + IComponentBuilder builder = component.Configure(name, configuration, builderDelegate); builder.AddServices(services => { @@ -42,7 +42,6 @@ public class ComponentFactory(IServiceProvider provider, services.AddSingleton(new NamedComponent(name)); }); - builder.AddConfiguration(name, configuration); IComponentHost host = builder.Build(); scopes.Add(new ComponentScopeDescriptor(name, diff --git a/Toolkit.Foundation/ConfigurationSource.cs b/Toolkit.Foundation/ConfigurationSource.cs index 57c60e7..9932602 100644 --- a/Toolkit.Foundation/ConfigurationSource.cs +++ b/Toolkit.Foundation/ConfigurationSource.cs @@ -13,8 +13,6 @@ public class ConfigurationSource(IConfigurationFile defaultSerializerOptions = new(() => { return new JsonSerializerOptions @@ -30,6 +28,8 @@ public class ConfigurationSource(IConfigurationFile Set((object)value); public void Set(object value) @@ -92,12 +92,12 @@ public class ConfigurationSource(IConfigurationFile(IConfigurationFile property in newObject) + { + existingObject[property.Key] = MergeNodes(existingObject[property.Key], property.Value); + } + + return existingObject; + } + else if (existingNode is JsonArray existingArray && newNode is JsonArray newArray) + { + foreach (JsonNode? item in newArray) + { + existingArray.Add(item); + } + + return existingArray; + } + else + { + return newNode; + } + } } \ No newline at end of file diff --git a/Toolkit.Foundation/IComponent.cs b/Toolkit.Foundation/IComponent.cs index 904e2bf..06016f4 100644 --- a/Toolkit.Foundation/IComponent.cs +++ b/Toolkit.Foundation/IComponent.cs @@ -2,6 +2,13 @@ public interface IComponent { - IComponentBuilder Configure(string? name = null, + IComponentBuilder Configure(string name, Action? builderDelegate = null); + + IComponentBuilder Configure(Action? builderDelegate = null); + + IComponentBuilder Configure(string name, + TConfiguration? configuration = null, + Action? builderDelegate = null) + where TConfiguration : class, new(); } \ No newline at end of file diff --git a/Toolkit.Foundation/Toolkit.Foundation.csproj b/Toolkit.Foundation/Toolkit.Foundation.csproj index 8ff9be3..f3f2d96 100644 --- a/Toolkit.Foundation/Toolkit.Foundation.csproj +++ b/Toolkit.Foundation/Toolkit.Foundation.csproj @@ -6,6 +6,7 @@ +