RouteValuesAddressMetadata ctors and XML docs (#818)

This commit is contained in:
James Newton-King 2018-09-30 08:54:59 +13:00 committed by GitHub
parent 3044cc8d9e
commit d1f3b90a0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 86 additions and 36 deletions

View File

@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Http
private readonly ConcurrentDictionary<Type, object[]> _cache;
/// <summary>
/// Creates a new <see cref="EndpointMetadataCollection"/>.
/// Creates a new instance of <see cref="EndpointMetadataCollection"/>.
/// </summary>
/// <param name="items">The metadata items.</param>
public EndpointMetadataCollection(IEnumerable<object> items)
@ -44,7 +44,7 @@ namespace Microsoft.AspNetCore.Http
}
/// <summary>
/// Creates a new <see cref="EndpointMetadataCollection"/>.
/// Creates a new instance of <see cref="EndpointMetadataCollection"/>.
/// </summary>
/// <param name="items">The metadata items.</param>
public EndpointMetadataCollection(params object[] items)

View File

@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Routing
private RouteData _routeData;
/// <summary>
/// Creates a new <see cref="RouteContext"/> for the provided <paramref name="httpContext"/>.
/// Creates a new instance of <see cref="RouteContext"/> for the provided <paramref name="httpContext"/>.
/// </summary>
/// <param name="httpContext">The <see cref="Http.HttpContext"/> associated with the current request.</param>
public RouteContext(HttpContext httpContext)

View File

@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing
private RouteValueDictionary _values;
/// <summary>
/// Creates a new <see cref="RouteData"/> instance.
/// Creates a new instance of <see cref="RouteData"/> instance.
/// </summary>
public RouteData()
{
@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Routing
}
/// <summary>
/// Creates a new <see cref="RouteData"/> instance with values copied from <paramref name="other"/>.
/// Creates a new instance of <see cref="RouteData"/> instance with values copied from <paramref name="other"/>.
/// </summary>
/// <param name="other">The other <see cref="RouteData"/> instance to copy.</param>
public RouteData(RouteData other)
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Routing
}
/// <summary>
/// Creates a new <see cref="RouteData"/> instance with the specified values.
/// Creates a new instance of <see cref="RouteData"/> instance with the specified values.
/// </summary>
/// <param name="values">The <see cref="RouteValueDictionary"/> values.</param>
public RouteData(RouteValueDictionary values)
@ -197,7 +197,7 @@ namespace Microsoft.AspNetCore.Routing
private readonly RouteValueDictionary _values;
/// <summary>
/// Creates a new <see cref="RouteDataSnapshot"/> for <paramref name="routeData"/>.
/// Creates a new instance of <see cref="RouteDataSnapshot"/> for <paramref name="routeData"/>.
/// </summary>
/// <param name="routeData">The <see cref="RouteData"/>.</param>
/// <param name="dataTokens">The data tokens.</param>

View File

@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing
private int _count;
/// <summary>
/// Creates a new <see cref="RouteValueDictionary"/> from the provided array.
/// Creates a new instance of <see cref="RouteValueDictionary"/> from the provided array.
/// The new instance will take ownership of the array, and may mutate it.
/// </summary>
/// <param name="items">The items array.</param>

View File

@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing
public class VirtualPathContext
{
/// <summary>
/// Creates a new <see cref="VirtualPathContext"/>.
/// Creates a new instance of <see cref="VirtualPathContext"/>.
/// </summary>
/// <param name="httpContext">The <see cref="Http.HttpContext"/> associated with the current request.</param>
/// <param name="ambientValues">The set of route values associated with the current request.</param>
@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing
}
/// <summary>
/// Creates a new <see cref="VirtualPathContext"/>.
/// Creates a new instance of <see cref="VirtualPathContext"/>.
/// </summary>
/// <param name="httpContext">The <see cref="Http.HttpContext"/> associated with the current request.</param>
/// <param name="ambientValues">The set of route values associated with the current request.</param>

View File

@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints
public class HttpMethodRouteConstraint : IRouteConstraint
{
/// <summary>
/// Creates a new <see cref="HttpMethodRouteConstraint"/> that accepts the HTTP methods specified
/// Creates a new instance of <see cref="HttpMethodRouteConstraint"/> that accepts the HTTP methods specified
/// by <paramref name="allowedMethods"/>.
/// </summary>
/// <param name="allowedMethods">The allowed HTTP methods.</param>

View File

@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing
public class EndpointNameMetadata : IEndpointNameMetadata
{
/// <summary>
/// Creates a new <see cref="EndpointNameMetadata"/> with the provided endpoint name.
/// Creates a new instance of <see cref="EndpointNameMetadata"/> with the provided endpoint name.
/// </summary>
/// <param name="endpointName">The endpoint name.</param>
public EndpointNameMetadata(string endpointName)

View File

@ -5,9 +5,20 @@ using System.Collections.Generic;
namespace Microsoft.AspNetCore.Routing
{
/// <summary>
/// Represents metadata used during link generation to find
/// the associated endpoint using route values.
/// </summary>
public interface IRouteValuesAddressMetadata
{
/// <summary>
/// Gets the route name. Can be null.
/// </summary>
string RouteName { get; }
/// <summary>
/// Gets the required route values.
/// </summary>
IReadOnlyDictionary<string, object> RequiredValues { get; }
}
}

View File

@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
/// <summary>
/// Creates a new <see cref="RoutePatternException"/>.
/// Creates a new instance of <see cref="RoutePatternException"/>.
/// </summary>
/// <param name="pattern">The route pattern as raw text.</param>
/// <param name="message">The exception message.</param>

View File

@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
/// <summary>
/// Creates a new <see cref="RoutePattern"/> from a collection of segments.
/// Creates a new instance of <see cref="RoutePattern"/> from a collection of segments.
/// </summary>
/// <param name="segments">The collection of segments.</param>
/// <returns>The <see cref="RoutePattern"/>.</returns>
@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
/// <summary>
/// Creates a new <see cref="RoutePattern"/> from a collection of segments.
/// Creates a new instance of <see cref="RoutePattern"/> from a collection of segments.
/// </summary>
/// <param name="rawText">The raw text to associate with the route pattern. May be null.</param>
/// <param name="segments">The collection of segments.</param>
@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
/// <summary>
/// Creates a new <see cref="RoutePattern"/> from a collection of segments.
/// Creates a new instance of <see cref="RoutePattern"/> from a collection of segments.
/// </summary>
/// <param name="segments">The collection of segments.</param>
/// <returns>The <see cref="RoutePattern"/>.</returns>
@ -173,7 +173,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns
}
/// <summary>
/// Creates a new <see cref="RoutePattern"/> from a collection of segments.
/// Creates a new instance of <see cref="RoutePattern"/> from a collection of segments.
/// </summary>
/// <param name="rawText">The raw text to associate with the route pattern. May be null.</param>
/// <param name="segments">The collection of segments.</param>

View File

@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Routing
private readonly Dictionary<string, List<IRouteConstraint>> _constraints;
private readonly HashSet<string> _optionalParameters;
/// <summary>
/// Creates a new <see cref="RouteConstraintBuilder"/> instance.
/// Creates a new instance of <see cref="RouteConstraintBuilder"/> instance.
/// </summary>
/// <param name="inlineConstraintResolver">The <see cref="IInlineConstraintResolver"/>.</param>
/// <param name="displayName">The display name (for use in error messages).</param>

View File

@ -3,22 +3,61 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
namespace Microsoft.AspNetCore.Routing
{
/// <summary>
/// Metadata used during link generation to find the associated endpoint using route values.
/// </summary>
[DebuggerDisplay("{DebuggerToString(),nq}")]
public sealed class RouteValuesAddressMetadata : IRouteValuesAddressMetadata
{
private static readonly IReadOnlyDictionary<string, object> EmptyRouteValues =
new ReadOnlyDictionary<string, object>(new Dictionary<string, object>());
/// <summary>
/// Creates a new instance of <see cref="RouteValuesAddressMetadata"/> with the provided route name.
/// </summary>
/// <param name="routeName">The route name. Can be null.</param>
public RouteValuesAddressMetadata(string routeName) : this(routeName, EmptyRouteValues)
{
}
/// <summary>
/// Creates a new instance of <see cref="RouteValuesAddressMetadata"/> with the provided required route values.
/// </summary>
/// <param name="requiredValues">The required route values.</param>
public RouteValuesAddressMetadata(IReadOnlyDictionary<string, object> requiredValues) : this(null, requiredValues)
{
}
/// <summary>
/// Creates a new instance of <see cref="RouteValuesAddressMetadata"/> with the provided route name and required route values.
/// </summary>
/// <param name="routeName">The route name. Can be null.</param>
/// <param name="requiredValues">The required route values.</param>
public RouteValuesAddressMetadata(string routeName, IReadOnlyDictionary<string, object> requiredValues)
{
if (requiredValues == null)
{
throw new ArgumentNullException(nameof(requiredValues));
}
RouteName = routeName;
RequiredValues = requiredValues;
}
/// <summary>
/// Gets the route name. Can be null.
/// </summary>
public string RouteName { get; }
/// <summary>
/// Gets the required route values.
/// </summary>
public IReadOnlyDictionary<string, object> RequiredValues { get; }
internal string DebuggerToString()

View File

@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Routing.Template
public class InlineConstraint
{
/// <summary>
/// Creates a new <see cref="InlineConstraint"/>.
/// Creates a new instance of <see cref="InlineConstraint"/>.
/// </summary>
/// <param name="constraint">The constraint text.</param>
public InlineConstraint(string constraint)

View File

@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
private readonly ILogger _constraintLogger;
/// <summary>
/// Creates a new <see cref="TreeRouter"/>.
/// Creates a new instance of <see cref="TreeRouter"/>.
/// </summary>
/// <param name="trees">The list of <see cref="UrlMatchingTree"/> that contains the route entries.</param>
/// <param name="linkGenerationEntries">The set of <see cref="OutboundRouteEntry"/>.</param>

View File

@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Routing
var d = new List<object>(metadata ?? Array.Empty<object>());
if (requiredValues != null)
{
d.Add(new RouteValuesAddressMetadata(null, new RouteValueDictionary(requiredValues)));
d.Add(new RouteValuesAddressMetadata(new RouteValueDictionary(requiredValues)));
}
return new RouteEndpoint(

View File

@ -24,11 +24,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -59,11 +59,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -86,11 +86,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -116,11 +116,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -145,11 +145,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -177,11 +177,11 @@ namespace Microsoft.AspNetCore.Routing
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"Home/Index/{id?}",
defaults: new { controller = "Home", action = "Index", },
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "Index", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);
@ -208,10 +208,10 @@ namespace Microsoft.AspNetCore.Routing
// Arrange
var endpoint1 = EndpointFactory.CreateRouteEndpoint(
"{controller}/{action}/{id}",
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "In?dex", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "In?dex", })) });
var endpoint2 = EndpointFactory.CreateRouteEndpoint(
"{controller}/{action}/{id?}",
metadata: new[] { new RouteValuesAddressMetadata(routeName: null, new RouteValueDictionary(new { controller = "Home", action = "In?dex", })) });
metadata: new[] { new RouteValuesAddressMetadata(new RouteValueDictionary(new { controller = "Home", action = "In?dex", })) });
var linkGenerator = CreateLinkGenerator(endpoint1, endpoint2);

View File

@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Routing
[Fact]
public void DebuggerToString_NoNameAndRequiredValues_ReturnsString()
{
var metadata = new RouteValuesAddressMetadata(null, null);
var metadata = new RouteValuesAddressMetadata(null, new Dictionary<string, object>());
Assert.Equal("Name: - Required values: ", metadata.DebuggerToString());
}