es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando los objetos HttpContext Request/Response/Session de la biblioteca NetStandard2.0

Actualización de una aplicación empresarial muy grande con .NET Framework 4.8, compuesta por más de 70 aplicaciones y más de 200 bibliotecas de clases base (C#).

Las bibliotecas de clases base se están convirtiendo a .NetStandard 2.0 para que puedan ser utilizadas por las aplicaciones de .NET Framework y .NET Core. La migración de cada aplicación se puede realizar cuando estén listas.

Me he encontrado con lo que parece ser un escenario común, pero no he sido capaz de encontrar una solución.

Las bibliotecas de clases base tienen referencias estáticas a HttpContext Request/Response/Session. Sé que podría refactorizar estas dependencias, pero eso es un trabajo enorme, así que;

Usando un ejemplo sencillo;

public class QueryStringHelper : IQueryStringHelper
{
    public string GetValue(string key) => HttpContext.Current.Request[key];
}

HttpContext no existe tal como lo conocemos en System.Web y necesita ser inyectado a través de IHttpContextAccessor.

public class QueryStringHelper : IQueryStringHelper
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public QueryStringHelper(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public string GetValue(string key) => _httpContextAccessor.HttpContext.Request[key];
}

Utilizar esta biblioteca de clases base desde una aplicación de .NET Core es bastante sencillo, registrado en el contenedor de inyección de dependencias (DI).

builder.Services.AddHttpContextAccessor();

PERO… ¿cómo podemos utilizar esta biblioteca de clases base desde una aplicación de .NET Framework? ¿Es completamente incorrecto este enfoque, o hay alguna forma de lograrlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar la biblioteca de clases base con las referencias estáticas de HttpContext Request/Response/Session en una aplicación de .NET Framework, puedes crear una clase envoltorio que implemente IHttpContextAccessor y utilice la propiedad HttpContext.Current para acceder al HttpContext actual. Esta clase envoltorio puede ser registrada en el contenedor de inyección de dependencias (DI container) de la aplicación de .NET Framework.

    Por ejemplo:

    public class FrameworkHttpContextAccessor : IHttpContextAccessor
    {
        public HttpContext HttpContext => HttpContext.Current;
    }
    

    Luego puedes registrar esta clase envoltorio en el contenedor de inyección de dependencias de tu aplicación de .NET Framework.

    builder.Services.AddSingleton<ihttpcontextaccessor, frameworkhttpcontextaccessor="">();
    

    Este enfoque te permite utilizar la biblioteca de clases base con las referencias estáticas de HttpContext Request/Response/Session tanto en aplicaciones de .NET Framework como en aplicaciones de .NET Core sin tener que refactorizar estas dependencias.</ihttpcontextaccessor,>

Comments are closed.