grpc-dotnet
grpc-dotnet copied to clipboard
Adds MapGrpcService overload for ServerServiceDefinition
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*
- makes
-
Grpc.AspNetCore.Server- adds new extension methods in
Microsoft.AspNetCore.Builder.GrpcEndpointRouteBuilderExtensionsclass - appends service entries of
ServerCallHandlerFactoryandServiceRouteBuilder(non-generic) onMicrosoft.Extensions.DependencyInjection.AddServiceOptionsmethod** - adds new class
Grpc.AspNetCore.Server.Internal.EndpointServiceBinderto bind methods inServerServiceDefinitioninto ASP.Net core web application server* - adds following internal classes that bind service via delegate instances instead of type argument:
Grpc.AspNetCore.Server.Internal.ServerCallHandlerFactoryclass*Grpc.AspNetCore.Server.Model.Internal.ServiceRouteBuilderclass*ServerCallHandlerBase*,UnaryServerCallhandler*,ServerStreamingServerCallHandler*,ClientStreamingServerCallHandler*, andDuplexStreamingServerCallHandler* classes inGrpc.AspNetCore.Server.Internal.CallHandlersnamespaceServerMethodInvokerBase*,UnaryServerMethodInvoker*,ServerStreamingServerMethodInvoker*,ClientStreamingServerMethodInvoker*, andDuplexStreamingServerMethodInvoker* classes inGrpc.Shared.Servernamespace
- extracts shared interface between
ServerCallHandlerFactoryandServerCallHandlerFactory<TService>intoIServerCallHandlerFactory*
- adds new extension methods in
-
test
- adds test cases for new overloads of
MapGrpcService
- adds test cases for new overloads of
-
examples
- modifies examples/README.md
- adds new example project examples/GreeterByServiceDefinition
- appends implementation of
Grpc.AspNetCore.Server.Tests.TestObjects.Services.WithAttribute.GreeterWithAttribute.BindServicemethod
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
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)