Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update
  • Loading branch information
JamesNK committed May 27, 2025
commit 37a2c367789bb89a1c6f11ad73be919e726c69a6
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,19 @@
#endregion

using Grpc.Core;
using Server;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Server;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();

var app = builder.Build();
app.MapGrpcService(getGreeterService);

app.Run();

static ServerServiceDefinition getGreeterService(IServiceProvider serviceProvider)
app.MapGrpcService(services =>
{
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
var service = new GreeterService(loggerFactory);
return Greet.Greeter.BindService(service);
}
});

app.Run();
12 changes: 12 additions & 0 deletions examples/Definer/Server/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"profiles": {
"Server": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
2 changes: 1 addition & 1 deletion examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ The error example shows how to use a richer error model with `Grpc.StatusProto`.
* [`google.rpc.Status`](https://cloud.google.com/apis/design/errors#error_model)


## [GreeterByServiceDefinition](./GreeterByServiceDefinition)
## [Definer](./Definer)

This sample is similar with [Greeter](#greeter), but its service instance for server is mapped by using `ServerServiceDefinition`.

Expand Down
13 changes: 5 additions & 8 deletions src/Grpc.AspNetCore.Server/GrpcEndpointRouteBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,16 @@ public static GrpcServiceEndpointConventionBuilder MapGrpcService(this IEndpoint
/// Maps incoming requests to the <see cref="ServerServiceDefinition"/> instance from the specified factory.
/// </summary>
/// <param name="builder">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
/// <param name="getServiceDefinition">The factory for <see cref="ServerServiceDefinition"/> instance.</param>
/// <param name="mapDefinition">The factory for <see cref="ServerServiceDefinition"/> instance.</param>
/// <returns>A <see cref="GrpcServiceEndpointConventionBuilder"/> for endpoints associated with the service.</returns>
public static GrpcServiceEndpointConventionBuilder MapGrpcService(this IEndpointRouteBuilder builder, Func<IServiceProvider, ServerServiceDefinition> getServiceDefinition)
public static GrpcServiceEndpointConventionBuilder MapGrpcService(this IEndpointRouteBuilder builder, Func<IServiceProvider, ServerServiceDefinition> mapDefinition)
{
ArgumentNullException.ThrowIfNull(builder, nameof(builder));
ArgumentNullException.ThrowIfNull(getServiceDefinition, nameof(getServiceDefinition));
ArgumentNullException.ThrowIfNull(mapDefinition, nameof(mapDefinition));

var serviceDefinition = getServiceDefinition(builder.ServiceProvider);
var serviceDefinition = mapDefinition(builder.ServiceProvider);

var serviceRouteBuilder = builder.ServiceProvider.GetRequiredService<ServiceRouteBuilder<ServerServiceDefinitionMarker>>();
var endpointConventionBuilders = serviceRouteBuilder.Build(builder, serviceDefinition);

return new GrpcServiceEndpointConventionBuilder(endpointConventionBuilders);
return MapGrpcService(builder, serviceDefinition);
}

private static void ValidateServicesRegistered(IServiceProvider serviceProvider)
Expand Down