using Microsoft.Extensions.DependencyInjection;
using System.Diagnostics;
using System.Threading.Tasks;
var serviceCollection = new ServiceCollection();
serviceCollection.AddScoped<ScopedVariables>();
serviceCollection.AddSingleton<AsyncLocalVariables>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var scopedVariables0 = serviceProvider.GetRequiredService<ScopedVariables>();
var asyncVariables0 = serviceProvider.GetRequiredService<AsyncLocalVariables>();
scopedVariables0.OrganizationId = new Guid("11111111-1111-1111-1111-111111111111");
asyncVariables0.OrganizationId = new Guid("11111111-1111-1111-1111-111111111111");
using (var scope = serviceProvider.CreateScope())
var scopedVariables1 = scope.ServiceProvider.GetRequiredService<ScopedVariables>();
scopedVariables1.OrganizationId = scopedVariables0.OrganizationId;
Debug.Assert(scopedVariables1.OrganizationId == scopedVariables0.OrganizationId);
var asyncVariables1 = scope.ServiceProvider.GetRequiredService<AsyncLocalVariables>();
Debug.Assert(asyncVariables1.OrganizationId == new Guid("11111111-1111-1111-1111-111111111111"));
Debug.Assert(asyncVariables1.OrganizationId == new Guid("11111111-1111-1111-1111-111111111111"));
async Task ChangeVariable()
var asyncVariables2 = serviceProvider.GetRequiredService<AsyncLocalVariables>();
asyncVariables2.OrganizationId = new Guid("22222222-2222-2222-2222-222222222222");
Debug.Assert(asyncVariables0.OrganizationId == new Guid("22222222-2222-2222-2222-222222222222"));
Debug.Assert(asyncVariables1.OrganizationId == new Guid("22222222-2222-2222-2222-222222222222"));
public Guid? OrganizationId { get; set; }
class AsyncLocalVariables
private static readonly AsyncLocal<Guid?> Organization = new();
public Guid? OrganizationId
get => Organization.Value;
set => Organization.Value = value;