Skip to content

Commit 42f78c8

Browse files
committed
Support explicit interface implementations
1 parent 24427ae commit 42f78c8

15 files changed

+82
-2
lines changed

src/Http/Http.Extensions/gen/RequestDelegateGeneratorSources.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,12 @@ private static Task WriteToResponseAsync<T>(T? value, HttpContext httpContext, J
158158
}
159159
return (false, default);
160160
}
161+
162+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
163+
where T : class, IBindableFromHttpContext<T>
164+
{
165+
return T.BindAsync(context, parameter);
166+
}
161167
}
162168
}
163169
""";

src/Http/Http.Extensions/gen/StaticRouteHandlerModel/Emitters/EndpointParameterEmitter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ internal static void EmitBindAsyncPreparation(this EndpointParameter endpointPar
127127
switch (endpointParameter.BindMethod)
128128
{
129129
case BindabilityMethod.IBindableFromHttpContext:
130+
codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = await BindAsync<{unwrappedTypeString}>(httpContext, parameters[{endpointParameter.Ordinal}]);");
131+
break;
130132
case BindabilityMethod.BindAsyncWithParameter:
131133
codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = await {unwrappedTypeString}.BindAsync(httpContext, parameters[{endpointParameter.Ordinal}]);");
132134
break;

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,5 +325,11 @@ namespace Microsoft.AspNetCore.Http.Generated
325325
}
326326
return (false, default);
327327
}
328+
329+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
330+
where T : class, IBindableFromHttpContext<T>
331+
{
332+
return T.BindAsync(context, parameter);
333+
}
328334
}
329335
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,5 +403,11 @@ namespace Microsoft.AspNetCore.Http.Generated
403403
}
404404
return (false, default);
405405
}
406+
407+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
408+
where T : class, IBindableFromHttpContext<T>
409+
{
410+
return T.BindAsync(context, parameter);
411+
}
406412
}
407413
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitSource_SimpleReturn_Snapshot.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,5 +559,11 @@ namespace Microsoft.AspNetCore.Http.Generated
559559
}
560560
return (false, default);
561561
}
562+
563+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
564+
where T : class, IBindableFromHttpContext<T>
565+
{
566+
return T.BindAsync(context, parameter);
567+
}
562568
}
563569
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleSpecialTypeParam_StringReturn.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,5 +249,11 @@ namespace Microsoft.AspNetCore.Http.Generated
249249
}
250250
return (false, default);
251251
}
252+
253+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
254+
where T : class, IBindableFromHttpContext<T>
255+
{
256+
return T.BindAsync(context, parameter);
257+
}
252258
}
253259
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleStringParam_StringReturn.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,5 +277,11 @@ namespace Microsoft.AspNetCore.Http.Generated
277277
}
278278
return (false, default);
279279
}
280+
281+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
282+
where T : class, IBindableFromHttpContext<T>
283+
{
284+
return T.BindAsync(context, parameter);
285+
}
280286
}
281287
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_NoParam_StringReturn_WithFilter.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,5 +243,11 @@ namespace Microsoft.AspNetCore.Http.Generated
243243
}
244244
return (false, default);
245245
}
246+
247+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
248+
where T : class, IBindableFromHttpContext<T>
249+
{
250+
return T.BindAsync(context, parameter);
251+
}
246252
}
247253
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleComplexTypeParam_StringReturn.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,5 +269,11 @@ namespace Microsoft.AspNetCore.Http.Generated
269269
}
270270
return (false, default);
271271
}
272+
273+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
274+
where T : class, IBindableFromHttpContext<T>
275+
{
276+
return T.BindAsync(context, parameter);
277+
}
272278
}
273279
}

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleEnumParam_StringReturn.generated.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,5 +269,11 @@ namespace Microsoft.AspNetCore.Http.Generated
269269
}
270270
return (false, default);
271271
}
272+
273+
private static ValueTask<T?> BindAsync<T>(HttpContext context, ParameterInfo parameter)
274+
where T : class, IBindableFromHttpContext<T>
275+
{
276+
return T.BindAsync(context, parameter);
277+
}
272278
}
273279
}

0 commit comments

Comments
 (0)