Calls to SentryTracingBuilder can now be chained correctly #2726
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.
Resolves #2721
Problem
The dotnet
UseRouting
andUseEndpoints
methods are just extensions on the builder... they set properties etc. on the builder before adding middleware. The only part of what they do that gets passed to theSentryTracingBuilder.InnerBuilder
then is the delegate that they return on the last line of their implementation (e.g. this).Previously we were calling that delegate against the InnerBuilder and returning the result directly (which implicitly returns a reference to the InnerBuilder). Chained calls would then be against the InnerBuilder rather than the SentryTracingBuilder.
This caused issues since
UseRouting
sets properties on theSentryTracingBuilder
and then (in the chained call)UserEndpoints
tries to follow up with some matching logic... only it's not using the same builder! It's using the InnerBuilder at this stage 😢Solution
We've separated using the InnerBuilder to call the delegate from the return value in our SentryTracingBuilder so that for chained calls, the same builder will always be used.