This repository was archived by the owner on Jul 12, 2023. It is now read-only.

Description
I would expect every sub-request runs in its own scope. So sub-request gets new instance for scoped services.
As a workaround I tried to define custom BatchMiddlewareEvents class and it seems to work.
public class CustomBatchMiddlewareEvents : BatchMiddlewareEvents
{
public override Task BatchRequestExecutingAsync(
BatchRequestExecutingContext context,
CancellationToken cancellationToken = default(CancellationToken))
{
var scopeFactory = context.Request.HttpContext.RequestServices.GetService<IServiceScopeFactory>();
context.Request.HttpContext.Features.Set<IServiceProvidersFeature>(new RequestServicesFeature(context.Request.HttpContext, scopeFactory));
return base.BatchRequestExecutingAsync(context, cancellationToken);
}
public override Task BatchRequestExecutedAsync(
BatchRequestExecutedContext context,
CancellationToken cancellationToken = default(CancellationToken))
{
var requestServicesFeature = context.Request.HttpContext.Features.Get<IServiceProvidersFeature>() as RequestServicesFeature;
requestServicesFeature.Dispose();
return base.BatchRequestExecutedAsync(context, cancellationToken);
}
}