55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Http.Features;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace Microsoft.AspNetCore.Hosting.Internal
|
|
{
|
|
public class RequestServicesFeature : IServiceProvidersFeature, IDisposable
|
|
{
|
|
private readonly IServiceScopeFactory _scopeFactory;
|
|
private IServiceProvider _requestServices;
|
|
private IServiceScope _scope;
|
|
private bool _requestServicesSet;
|
|
private HttpContext _context;
|
|
|
|
public RequestServicesFeature(HttpContext context, IServiceScopeFactory scopeFactory)
|
|
{
|
|
Debug.Assert(scopeFactory != null);
|
|
_context = context;
|
|
_scopeFactory = scopeFactory;
|
|
}
|
|
|
|
public IServiceProvider RequestServices
|
|
{
|
|
get
|
|
{
|
|
if (!_requestServicesSet)
|
|
{
|
|
_context.Response.RegisterForDispose(this);
|
|
_scope = _scopeFactory.CreateScope();
|
|
_requestServices = _scope.ServiceProvider;
|
|
_requestServicesSet = true;
|
|
}
|
|
return _requestServices;
|
|
}
|
|
|
|
set
|
|
{
|
|
_requestServices = value;
|
|
_requestServicesSet = true;
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_scope?.Dispose();
|
|
_scope = null;
|
|
_requestServices = null;
|
|
}
|
|
}
|
|
} |