<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="7.0.2" />

PassThroughPropagator

using System.Collections.Generic; namespace System.Diagnostics { internal sealed class PassThroughPropagator : DistributedContextPropagator { internal static DistributedContextPropagator Instance { get; } = new PassThroughPropagator(); public override IReadOnlyCollection<string> Fields { get; } = LegacyPropagator.Instance.Fields; public override void Inject(Activity activity, object carrier, PropagatorSetterCallback setter) { if (setter != null) { GetRootId(out string parentId, out string traceState, out bool isW3c, out IEnumerable<KeyValuePair<string, string>> baggage); if (parentId != null) { setter(carrier, isW3c ? "traceparent" : "Request-Id", parentId); if (!string.IsNullOrEmpty(traceState)) setter(carrier, "tracestate", traceState); if (baggage != null) DistributedContextPropagator.InjectBaggage(carrier, baggage, setter); } } } public override void ExtractTraceIdAndState(object carrier, PropagatorGetterCallback getter, out string traceId, out string traceState) { LegacyPropagator.Instance.ExtractTraceIdAndState(carrier, getter, out traceId, out traceState); } public override IEnumerable<KeyValuePair<string, string>> ExtractBaggage(object carrier, PropagatorGetterCallback getter) { return LegacyPropagator.Instance.ExtractBaggage(carrier, getter); } private static void GetRootId(out string parentId, out string traceState, out bool isW3c, out IEnumerable<KeyValuePair<string, string>> baggage) { Activity activity = Activity.Current; while (true) { Activity activity2 = activity?.Parent; if (activity2 == null) break; activity = activity2; } traceState = activity?.TraceStateString; parentId = (activity?.ParentId ?? activity?.Id); isW3c = (parentId != null && Activity.TryConvertIdToContext(parentId, traceState, false, out ActivityContext _)); baggage = activity?.Baggage; } } }