diff --git a/Directory.Build.props b/Directory.Build.props index 48851e5..6c2fc0b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -10,7 +10,7 @@ 9 false - 0.0.56-alpha + 0.0.57-alpha MIT https://github.com/jpacelli62/Faaast diff --git a/src/Faaast.Metadata/ApplicationBuilderExtensions.cs b/src/Faaast.Metadata/ApplicationBuilderExtensions.cs index 55fc6f4..26e2888 100644 --- a/src/Faaast.Metadata/ApplicationBuilderExtensions.cs +++ b/src/Faaast.Metadata/ApplicationBuilderExtensions.cs @@ -1,4 +1,6 @@ -using Faaast.Metadata; +using System.Collections.Generic; +using System; +using Faaast.Metadata; using Microsoft.Extensions.DependencyInjection.Extensions; namespace Microsoft.Extensions.DependencyInjection @@ -10,5 +12,12 @@ public static IServiceCollection AddMetadata(this IServiceCollection services) services.TryAddSingleton(); return services; } + + public static IServiceCollection AddMetadata(this IServiceCollection services, Dictionary definitions) + { + var mapper = new DefaultObjectMapper(definitions); + services.TryAddSingleton(mapper); + return services; + } } } diff --git a/src/Faaast.Metadata/DefaultObjectMapper.cs b/src/Faaast.Metadata/DefaultObjectMapper.cs index 9439bef..d682543 100644 --- a/src/Faaast.Metadata/DefaultObjectMapper.cs +++ b/src/Faaast.Metadata/DefaultObjectMapper.cs @@ -9,6 +9,10 @@ public class DefaultObjectMapper : IObjectMapper { private Dictionary Definitions { get; } = new Dictionary(); + public DefaultObjectMapper() { } + + public DefaultObjectMapper(Dictionary definitions) => this.Definitions = definitions; + private readonly ReadWriteSync _sync = new(); public IDtoClass Get(Type type) diff --git a/src/Faaast.SeoRouter/RoutingRule.cs b/src/Faaast.SeoRouter/RoutingRule.cs index 029eab5..503daae 100644 --- a/src/Faaast.SeoRouter/RoutingRule.cs +++ b/src/Faaast.SeoRouter/RoutingRule.cs @@ -211,6 +211,7 @@ public virtual RouteValueDictionary UrlTokens() public virtual VirtualPathData GetVirtualPath(IRouter router, RouteValueDictionary ambiantValues, RouteValueDictionary values) { + var pathData = new VirtualPathData(router, this.Url); if (this.Kind == RuleKind.Global) { foreach (var parameter in _routeTemplate.Parameters) @@ -230,38 +231,44 @@ public virtual VirtualPathData GetVirtualPath(IRouter router, RouteValueDictiona } } - var binderValues = _binder.GetValues(ambiantValues, values); - if (binderValues == null) + string virtualPath; + if (this.IsDynamic) { - // We're missing one of the required values for this route. - return null; - } - - var virtualPath = _binder.BindValues(binderValues.AcceptedValues); - if (virtualPath == null) - { - return null; - } + var binderValues = _binder.GetValues(ambiantValues, values); + if (binderValues == null) + { + // We're missing one of the required values for this route. + return null; + } - if (this.Url.EndsWith("/") && !virtualPath.EndsWith("/")) - { - virtualPath += "/"; - } + virtualPath = _binder.BindValues(binderValues.AcceptedValues); + if (virtualPath == null) + { + return null; + } + if (this.Url.EndsWith("/") && !virtualPath.EndsWith("/")) + { + virtualPath += "/"; + } - var pathData = new VirtualPathData(router, virtualPath); - foreach (var dataToken in binderValues.CombinedValues) - { - if (!binderValues.AcceptedValues.ContainsKey(dataToken.Key)) + pathData = new VirtualPathData(router, virtualPath); + foreach (var dataToken in binderValues.CombinedValues) { - pathData.DataTokens.Add(dataToken.Key, dataToken.Value); + if (!binderValues.AcceptedValues.ContainsKey(dataToken.Key)) + { + pathData.DataTokens.Add(dataToken.Key, dataToken.Value); + } } } + else + { + return pathData; + } return pathData; } else { - var pathData = new VirtualPathData(router, this.Url); return pathData; } }