[StrawberryShake] AddScopedXClient #7878
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new method to the service collection extension to register the client as scoped as opposed to singleton.
Why?
This is so a client generated for a Blazor WebAssembly project can be shared with the server hosting it. Sharing it as opposed to use a newly generated client with NoStore. This way a developer can reuse components and services between client side rendering and server side prerending.
Initially I tried to get a PR for having a client generated with two modes, one for the WebAssembly client (noStore = false) and one for the server side Aspnet (noStore = true). However this proved too difficult because data types were generated differently and there was a lot of mapping involved (entityIds vs entities) so sharing the components was not easy.
With this new approach there's the side effect that entityIds are also generated on the server (unlike the noStore = true approach) and so cache hydration from a prerendered page is easier to accomplish.
A followup PR will implement prerendering, stream rendering, and cache hydration of the Blazor components, I already have a working PoC.
This is what the new method look like with all the namespaces removed: