grpc-dotnet icon indicating copy to clipboard operation
grpc-dotnet copied to clipboard

Adds MapGrpcService overload for ServerServiceDefinition

Open aka-nse opened this issue 1 year ago • 1 comments

Is your feature request related to a problem? Please describe.

This PR is implement for #2236.

ServerServiceDefinition is defined in Grpc.Core.Api library, and it was a prefer way to implement gRPC server with Grpc.Core. In current grpc-dotnet, the server should be implemented on Asp.Net web application DI container via GrpcEndpointRouteBuilderExtensions.MapGrpcService generic method. The APIs in this proposal bridges legacy way into grpc-dotnet to enable to migrate easier.

Describe the solution you'd like

2 overloads of GrpcEndpointRouteBuilderExtensions.MapGrpcService are added:

public static class GrpcEndpointRouteBuilderExtensions
{
    public static GrpcServiceEndpointConventionBuilder MapGrpcService(
        this IEndpointRouteBuilder builder,
        ServerServiceDefinition serviceDefinition);

    public static GrpcServiceEndpointConventionBuilder MapGrpcService(
        this IEndpointRouteBuilder builder,
        Func<IServiceProvider, ServerServiceDefinition> getServiceDefinition);
}

This change enables to map gRPC services via Grpc.Core.ServerServiceDefinition, therefore migration from Grpc.Core can be more easier.

Changes in this PR

  • Grpc.Core.Api

    • makes Grpc.Core.ServerServiceDefinition.BindService(ServiceBinderBase) method as public*
  • Grpc.AspNetCore.Server

    • adds new extension methods in Microsoft.AspNetCore.Builder.GrpcEndpointRouteBuilderExtensions class
      • MapGrpcService(this IEndpointRouteBuilder, ServerServiceDefinition)*
      • MapGrpcService(this IEndpointRouteBuilder, Func<IServiceProvider, ServerServiceDefinition>)*
    • appends service entries of ServerCallHandlerFactory and ServiceRouteBuilder (non-generic) on Microsoft.Extensions.DependencyInjection.AddServiceOptions method**
    • adds new class Grpc.AspNetCore.Server.Internal.EndpointServiceBinder to bind methods in ServerServiceDefinition into ASP.Net core web application server*
    • adds following internal classes that bind service via delegate instances instead of type argument:
      • Grpc.AspNetCore.Server.Internal.ServerCallHandlerFactory class*
      • Grpc.AspNetCore.Server.Model.Internal.ServiceRouteBuilder class*
      • ServerCallHandlerBase*, UnaryServerCallhandler*, ServerStreamingServerCallHandler*, ClientStreamingServerCallHandler*, and DuplexStreamingServerCallHandler* classes in Grpc.AspNetCore.Server.Internal.CallHandlers namespace
      • ServerMethodInvokerBase*, UnaryServerMethodInvoker*, ServerStreamingServerMethodInvoker*, ClientStreamingServerMethodInvoker*, and DuplexStreamingServerMethodInvoker* classes in Grpc.Shared.Server namespace
    • extracts shared interface between ServerCallHandlerFactory and ServerCallHandlerFactory<TService> into IServerCallHandlerFactory*
  • test

    • adds test cases for new overloads of MapGrpcService
  • examples

    • modifies examples/README.md
    • adds new example project examples/GreeterByServiceDefinition
    • appends implementation of Grpc.AspNetCore.Server.Tests.TestObjects.Services.WithAttribute.GreeterWithAttribute.BindService method

Describe alternatives you've considered

This commit contains concrete code as far as I can write, but I do not care about these implementations. I welcome better ways to realize this suggestion.

Additional context

No response

aka-nse avatar Sep 15 '24 11:09 aka-nse

CLA Signed

The committers listed above are authorized under a signed CLA.

  • :white_check_mark: login: JamesNK / name: James Newton-King (6398cacc437a28c1ece9c64ced6f42d69466387c, 7c07861e14d3f9c9591e49882e45ee0339a288d0, 01c80e46dafa7211c9c040faf1fee5ddecfcf0b2, d9dbf45d98f7fb88eda7004d93dda74a14954be3, 95ea998db36b25649d40e1167d706e73d6c50d66, 6121fe95f048e00a258ade5c17f15ad3122a0773, 03635e0de9a32eb0d48e2c2943b5050261d3870d, dffdf977f8d6e34000b29f45b8678d6d48cd4930, bf86d84de82833388f0e380c13fad0323f4385a5, f651db878c5c8202f087f28791dcc7091125a512, af6efc6b1d6494636ee0a5507422159520c4091e, 5bb6169aa4562f7e0ab5395a679a306044af49dc, 4144942157f46027a74205926a8abb475561671a, 9ca2b2c977a0e104b68da2d111ee5495d10826f9, 90cd26a105be1119970c9f2ebbb86bb11d1cd897, 912764822ceed6dbf0266d34eb7ca6d675cc6290, 3607732ca4341d74beae2f4c28c064ba12804fea, 86dfed73fcc14ea614a5f090efe578a01ca46ffe, 2a729ddd964cf66a77a6ca42453fadaf571c5ca0, c6094b7f976dbaafc6be04aad8604b3e2b601d23, f4be0554fce6c80d72effa70f3ceff9608707ff7, fd227976befa0e093c679e46cc714c4532d17318, f10d413918b99109cdbacfb2862199815694ac02, 48a846d8d955b421f358b13862c7dffa6edf0eff, 75def4d3476ea6353cab1e9e9ac242639eef1ee2, 45008ee75d3e62ac8f358c1d6e7f00b7809c1f9b, af39f3c280d5042c688306764e9d2ca5215574a7, 439110e7f013eece0b892a470ea4c3d939b95cf9, 216a34c8e699a72a26e9dad183dddfc378adee02, 921d476f000f8bb156a9d657b970a31c3bab75f3, cd338cf0c1204a072d9de990bd93780f8cecee69, 814912ceb81bd85294d155ebacdecb5a381b1e11, 1e28e813a0d9214ffa6f9f4fce83e508b7362957, 0f4ba2d5f49922fee7f86ac04569c0475b7cc712, 3ad4bfe691790c59db384be631dc200fe3d53d70, a993b6897330e25aca432d14f2e398d7cdfd2f55, 1c2350831fd6f6f4851e6910d062a8e190c6fd1b, 62927b4bee240b3c6c5fc13288a986dde5f0f403, 6d3156098ec3c159dd0f09cb22c9cc45d5e2e20b, 6f878ceda570e392d1c045211fcda50ff4f14b59, df78726f7477c3c553c6d864d35dee7e7c2c4b35, 5426b0ff294219dfda6798473d5d5fb9f52df1d9, 7eb62720315707525fc99204fd457898967a318e, 946610feab2967d7f960e7a0c0260d84f82caba7, fa8d1b1b7b94f68db18715da688849e9678626ab, 246864e2ca8e34d60acb4669e6b98a4e922429bd, cf99442e630de238a845bc196e28d58472bf4a0a, 5ea586df7c7fa81ba7071414992c797f62194be8, 45403b22eaa7ebf498a456ea75aec33eb55a624b, 67e8ad1160098444f460861b2f4e968c426c5049, 8a5317c158040336aa4e70e6c8c4886edb348195, 5a0bc98c325ea0ebbd1540b1dd67ab9c08eae4b2, 8374dbc319eb3603053bddd2c4ce5972bfe9a4e1, b6fd42f26508156867a02974a449bc45127bdac1, 2fc5ba699056d25455bc309b1c48be57bf4ba4e5, b04754cb6be70958690f0eed67a21e16ddaadc66, 59256f154c6bcbaa0429e63fc6d35dd9c1bf23c9, 7e3079bc7e6d8f960d87b8e42c90fb5da4b9ebd8, d8b5002ce211e873fe0ca28ebe1efe8daa9dbc3a, e3c10f667b0a05a06e81a036c5b76b27c2a03105, d613e8edce3eec82fbb48351e7edc5eaff9e123d, 48223d457ddb0d6f7d85ba3fabf0ad176959d4a0, e7a650a9b13948114d91d3f25ac37b66513d5d12, 240c1399385979bf2a29fac20273702e37e63e5d, cd61258ba8f75ade4ce57f65be3a5cdd89eaa56d, 0eaad23896a8cf21c748182ab1de40bb1f469b3f, abb6f6fc9cb23af29af5ed0d1165fdce82e060f9, 7075a0f312634d9b89482d15b19bb69029977071, 24b3e3797886bf9fa0972b75a24ff0665176272e, 26f0d9ac298e2de3b61dd5507f8b026361f8e1c6, a2d3b3f8f0ac8b02537b4409eff87391d7ee0472, da0811bfa3356004688325067f0d42a44b509820, 3331f8b80da383972e1af390497654aaa1a0b35a, d8e11f4379a981bb52c2efbf54b7c0c74b23587f, ffc571d31215eec747388ffe24227735ed477c05, 75b40bf77989ac6f4d869484c0d3bb5013abede0, f6180ae2a05fdc0b071802a48ec5f68d01563b51, 5646440284daba0f8945332f36c1c1a7de5d794a, 1d3f1c46808f81c4ad703c2a012432cd6d0d0f7c, fdb133843c280a0379619b9e6322eb20a45221d8, 578ab230d78a83fcfa7c08e21e80a36dcd9977b9, b57e35d6d60a54c259d95040c5ed2f058f72a4ef, 34ba4add1d38d1aceb655aba6f89174c469f6df0, dcf1f8103783bdc387cb4ba25b96b4e202813b52, 14927b21ed5e885741eceff46b01c1b15bd2cf8d, d00fdc5e14da90101eb8a70662b3b745dc45e69e, eaf656b22a0d891d26f955f3896a76081cc4c697, d320c2cbab76a6c23e6aadee77796fe9aa519cd9, 5a799fbc3fa8f419a45ed4a40b458e119063d799, 2e6ea64fd4f11e10835d33a3a8b9ed844c51a2a5, 3bf166182903bfafd9f307f5abbc94ddac13969c, 3a11cd516431b5fecc0195081fcec9dd7a0a0518, dacd7064f8f95fa15307092f98ecc7efb455d20e, e0ee017677734feeafff2aaf1340b3bec0b634f6, af7a5fb0bbbe9f53bd8007cb2eed6abb68fd95da, 03698bfdfb4f0c15be859a78a1538ff727009261, e001e64dc611d0977c0061d64181e48f282b92f7, 9b9aad699a5c6c573f8a1433cb6ab7462102209b, 8dd9a971706efa1860ac6a429b22359b4deb7144, 8076eba4af7de56b3b6184848f138ba7a10d1cdc, 22b77c12f73f8095a99a582f9bfb63bbc9df22f7, 2f0c208ac1e58d04f3eb5922a204f39e469c6cd8, 1f2bac2c19dfe9b0a5963687f9ac871ce4a246ed, b16071a2dac1a7508ce85677388d0b0586a604df, 4689ece3fdc62444f4157659f1682f59d6b7b4cf, f67dfeb0a5c826cea3083ce14232bb6fdac86351, 3847ae261a5bb4271504b4cc07d8b2002995ee1d, 1f8cc43ea10313450e55cea335495714edc3473c, b38841b875873996be2f3768296440eedb12dfef, 9d3adb256bce37ac02ee3a06744b131135829b3e, 9390a343a3250881eb2ff12cfbec213a1bb99664, 6accfc54128e2e77894bd648b2ee3681766d3cf9, dda67463a9a8f5b6f746f8938862ebd7edaa2b3c, 471db974c5624b4a63329dd1dd7a95d02495b110, ea10631b848f70dbbb4d51d5c47f41cca3e874f5, 8a6337498f7f896c2a3122a1413ba2ee2cffe14c, 3902653646962b4ea51fd65dc84d89652e8aa312, 11ed2727fdb58bf5054e6759f58dfad6373550bc, 49c63d8038bb80d464a2994e03e803087472f94a, 3e12474a633f0bdf5b3ac2e722728ab8125f8503, 3c7b518114fa90dd3a508e6fb17b72a45b4c0bd8, 0d7c440f2374841183733e91d89e19a0f1460683, b45d7883e65bc1a202f7fabbb9c3ef5239853238, d6026ff167ce5c790f3157b309ea81ffc181d800, 26f2d65be9d5dad63ba1175115842056adcfef9a, cfd24eadc3eb8db63710bec4ed4846fa123a340b, ca213379780b89a954fe1ac8d2698482535c7572, 46534d6a16d3a5469ee25a9ac625cae5c4c04480, c25e21db4b62a3d83a36d9b4902e5a9aeb052f09, 7bc9161a82753399a525cc4c9b82b11bce736cac, 69bea3bda822bca2ea172d283051841a9d87d318, 54bc27cecc7e0a1fa1ad53ce8b4e32d5adedf7ba, 836d0ec1bc0c0ed5170335f1fefd572eede436f4, b191067e33632977e630f9f009f62c7707693b32, a6ede683b6dcd5f067d04e06b8f28e9279b8f8d2, f903447b45cc29d2a4a1207da3f44294c9c3f639, c1089bd40e92156161fb03f5b26edebed421817d, a14eb33e5a1b7e5bb7094896e7ee8b952fb0a1db, 960a6c9f74fa6f8514c22b938532eb0ca42819eb, a7fe4df1015ee109ac4dceca7ec87fad7b0280c2, d1a867f997fc688c56b8e4c932581093e6df4e2d, 3da90f85fc3db2c6c6cd3f7baf6bdea7ff74a90f, 09f2ffde93d2ef841e76f118f85bd81815452db9, 1898e4aae73293b7ab4990c945377614d516c6a0)
  • :white_check_mark: login: dependabot[bot] (5744dce6924fc58b36d034bf4a9af58e66295ce1, 48668d69a289148433e71b309e0055942e23f778, 7fe1a4b1a56c273c51257904aeab60635cd8a844, 7b1c232ea24efe0e44b056c3cc31eb86a187a451, 55e22a232eede7b3d1afe0a34f8e662b3405afeb, e1c4bbece04b517cab447b34d3e203a98dcd70fb, 9e0057f182e95fa52d9260586e00f7f3cc17527e, 0d4ca634764442142094b98b65a275fb30cd7e36, da40bb20dc46d02d9f4c311dacdbda58b4f51b15, 969acb826a53724b71dd48b145d80b2c41c32378, 9314b9b11d091d47849ff65646a858942223e1b6, 1bcf7fc69f874558ecb7e868d8223c8ab04686bf, f629c49e1603766877b81e446bf7c754473cf3a1, 7cc9d23f3a7faab6fcf7f8565b315f4c181559e3, 04a8a839008d39af9f1302e28bb04270780d84e0, 799e63c162e7b43f3ac7beb582dd37e9617283b2, ecfaf6236f593b11cc1d1631de27671707a90e52, d62320f31587032ac7dcf3b7d00fc7161acf04b9, 95c6993a6b6ed712d63a14af066d7508bd26fbcf, 3d32eec420ae216b7d5430e4642cfa6f734e5715, 4fdc23165c78ab1ad66c75020ccf201d9bd746dd, 6640a3d0adf7aa4dc1f37b2fce06020836640850, bffe903303d4f5cca228549786e1a4d25537e512, db45ff31114b52dcd4529a56d01e50b16fa27d03, 3c6f376f7ab7396d62a0040a0abf838d4722e654, 963eef4d63a1a19bb080ca2b6979affca71c11e2, 9f55f240c45bcd83631229622fa471c380e6cfb1, 061f278050a6b98528b08613ea448399393b8cfd, 0be583c32df584b0fd1e2224ca50c0c241ee1d5f, 67ef32bf8bd50ba02e4dc6008705678de4d631d4, 76abbb54ef1853d5186e8dfb465ff346e75cfaeb, f930fbd5656df23f2a8d898739e5e81e150cf053)
  • :white_check_mark: login: jtattermusch / name: Jan Tattermusch (d8329b650bbfc5739aac48f4046dfc2da49d4654, 88e72b02f78faa7455a54b1c415e4b218eb7526e, 5ebbc44f4c43be6dd5e01870012ad6c6cfe4c7b1, 6854deb4476974e502ba6f1278764d7d7ca9c59a, 139bf89af0b6f208eafebe1160e8cf4f709a5202, bee4de7d47478059eb40de88ece9f93e4618e5d7, ead0dac8646313807e391f41a5fda3e4fe28bbd8, 7d804ac7a47101749e9125b6387010fce0406840, 70daf0f83ae3348c5f7dd990013e47df794010ad, 2489269eeaa62af5fe4c9fe6c0598d0fe7c5118c, 39fff69a55f4d6da18efa04390f9e908f05bd5d5, 38bf96e5c9fe92e1c28934eab1b15c94960ecdb7, 4ac17d0a292a3ea28a95d798a5e60629bffb2fba, 4d48001ffc360e45cccd3dd5643746a2c86f16d2, f983b5a35ac250f62e77776e097f75c5e4e0127a, f14d3ba9fcb8dbe54799389a53ce046c3a131d79, 68caeb72b1896f5866aae5c51676798185fdab13)
  • :white_check_mark: login: BrennanConroy / name: Brennan (0dcd4d14e0ec8b3778a7d851f9aa46c2e6916b1d)
  • :white_check_mark: login: stanley-cheung / name: Stanley Cheung (78265d68ca6d248b954866f1769555e7a04de1c1, f6349b581981b0039ab2dcd246109bd4528f5c8e, 4489b30d0f306fcef22a3752629704dc8a315a14, 5f0e3b3a891729cdd39b1c0336bd060e6929f9aa)
  • :white_check_mark: login: drewnoakes / name: Drew Noakes (0d9f4d6dcee27962cfb182e6a566d8c69a939ac1)
  • :white_check_mark: login: WeihanLi / name: Weihan Li (c5a4051cef9249964a82793cd726634e3fcf83a2, 104e599a2efe20559d094da2ffee5e83ea432ec1, 04e860a2d422a903ba8ce7f29b0ded77b5061cc2, 6f5c3e84d69a431fec36fd64c3617c84000d7518, d2e80dd82bc620351e2defaa16b540567eefe8e5, 93281db2847161f1c3c58eecfb288ee2acbfa2ea, d1b29dabbcc6405739383f57a3826d5291a6868e, 4e186b68ce912eb72576e3d3714fd3aba314adfa)
  • :white_check_mark: login: thompson-tomo / name: James Thompson (c4fa8cfda13d3fcab3861f646207e70d89f908e4)
  • :white_check_mark: login: wrall / name: William Rall (007558a97e4f645b376082adc62b2d774b979a13)
  • :white_check_mark: login: mgravell / name: Marc Gravell (6bac20454e1fe9e43b4ec33e53fa898101c0668b)
  • :white_check_mark: login: mayuki / name: Mayuki Sawatari (bb4105dbd8c3bbc6ef1d780a1d56fb65750b3045)
  • :white_check_mark: login: teo-tsirpanis / name: Theodore Tsirpanis (51d2d47aecd05159acaf0613d8a4d8a18bb1b328)
  • :white_check_mark: login: stephentoub / name: Stephen Toub (9f3d7776841db7040a8c82356064339a8494f090)
  • :white_check_mark: login: voroninp / name: Pavel Voronin (b192ebe59eb9fbcc7d7b9be740ca858358a31664)
  • :white_check_mark: login: tomkerkhove / name: Tom Kerkhove (d8cbda6da645bae1f21d3c2644950b65f1ef2b8d)
  • :white_check_mark: login: Blackclaws / name: Felix Winterhalter (c82ed216ad7361636a021e8c26577e923fb36fe0)
  • :white_check_mark: login: apolcyn (64cf8d4d69b2543527667bc713fdc659c5a21896, 91aeb1ed872699777a8f0e1ef483d0ab18226c8a, d8850e7161d61105d481e6ea69f5d0e5136ff574, f97f78b32b07e981db220bdada5ac93187d6cd85, eceb2ff775962a028da8efe4091ed05da18a383b, 85e00ab2e55dd865076dfa6b0823c5312f2a41f6, 6ef872df202ea41570b9a5c1b6f89244b06fbeda, b66447a6e0ba9506525a5fae2445074f0950240a, 29c20c1ae47878d28ec238c7a82496f3aee57c6f, 9585b8fdfe187f795466621a6ee19b3f7937eef1, 20a84dd43c0c91e4a107ad2a44b7bd7b78f02653, d9631db76ab2fb3abee217ce3c4cb7ecbe3e0773, b21081e60125a0a371fc93d466368bd6e4def42c, d1521228c5cefb19868d3be88a39f2caecc58857, 1701f40610c853f933b7519c0dfcc1f61b4c4a85, 30408155838743b9a41b94dda33cc758e97562d2)
  • :white_check_mark: login: Varorbc / name: Varorbc (1821fd7b3aa0640f1bc4b58c58ddae72d4158402, 2ad39361d98ef8548112b5f0039511c285d79810)
  • :white_check_mark: login: tonydnewell / name: tony (2aafcebeeb9e4b3b2978683c129f64983d49d231)
  • :white_check_mark: login: sebastienros / name: Sébastien Ros (164ec8f45450a299bcbb4c08c7fd830df3d9c6bc, 7de80c3263d811d459d861e40a4fe9aba954361a)
  • :white_check_mark: login: jjanuszkiewicz / name: Jakub Januszkiewicz (d13eeb252e1f0196127254e99ce5ecb837816441)
  • :white_check_mark: login: ellull / name: Eduard Llull (a8e9f45d3908a314e15fafa717a0cfaddbbc6ab8)
  • :white_check_mark: login: aka-nse / name: aka-nse (2439c109da32fa35ef9d92118774ce59cfa583fb, 687ee93e9a645708f51749d230fa66cd213cd028, 4e5c774fe8861bea102f86d7067e7622806be84f, e2789f3c6b14ed35f560158161c4a3b8b2775e1f, aa5e2827f86d0aab31895b2ada14c49f7a55bc6d, eede3a18ded867f614e963a3b9bf609f5cdea7aa)
  • :white_check_mark: login: wabalubdub / name: Noam Greenberg (5956f2452350de93356560e3f1084552a8b921c3)
  • :white_check_mark: login: dexcompiler / name: Dexter Ajoku (f0f9c48cfe30084b807fb0766a9e8c4500236ccd)
  • :white_check_mark: login: Henr1k80 / name: Henrik (4659c00a5c48e786b85bdb980db152c6ca86e38e, ed8491283bdab78747e774b58775a8ade560902b)
  • :white_check_mark: login: subhraOffGit (a6e1d25c0a89350e1fe823eb81e32d9791d691fa)