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

Allow scoped sub-requests #13

@petronellius

Description

@petronellius

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);
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions