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