Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

310
Vistas
¿Cómo puedo usar la inyección de dependencia en un atributo ActionFilterAttribute de .Net Core?

Clase AuthenticationRequiredAttribute

 public class AuthenticationRequiredAttribute : ActionFilterAttribute { ILoginTokenKeyApi _loginTokenKeyApi; IMemoryCache _memoryCache; public AuthenticationRequiredAttribute(IMemoryCache memoryCache) { _memoryCache = memoryCache; _loginTokenKeyApi = new LoginTokenKeyController(new UnitOfWork()); } public override void OnActionExecuting(ActionExecutingContext filterContext) { var memory = _memoryCache.Get(Constants.KEYNAME_FOR_AUTHENTICATED_PAGES); string requestedPath = filterContext.HttpContext.Request.Path; string tokenKey = filterContext.HttpContext.Session.GetString("TokenKey")?.ToString(); bool? isLoggedIn = _loginTokenKeyApi.IsLoggedInByTokenKey(tokenKey).Data; if (isLoggedIn == null || !((bool)isLoggedIn) || !Constants.AUTHENTICATED_PAGES_FOR_NORMAL_USERS.Contains(requestedPath)) { filterContext.Result = new JsonResult(new { HttpStatusCode.Unauthorized }); } } public override void OnActionExecuted(ActionExecutedContext filterContext) { } }

InicioControlador

 public class HomeController : Controller { IUserApi _userApi; ILoginTokenKeyApi _loginTokenKey; IMemoryCache _memoryCache; public HomeController(IUserApi userApi, ILoginTokenKeyApi loginTokenKey, IMemoryCache memoryCache) { _loginTokenKey = loginTokenKey; _userApi = userApi; _memoryCache = memoryCache; } [AuthenticationRequired] // There is AN ERROR !! public IActionResult Example() { return View(); } }

ERROR :

Error CS7036 No se proporciona ningún argumento que corresponda al parámetro formal requerido 'memoryCache' de 'AuthenticationRequiredAttribute.AuthenticationRequiredAttribute(IMemoryCache)' Project.Ground.WebUI

Mi problema es en realidad: no puedo usar la inyección de dependencia en las clases de atributos .

Quiero usar ese atributo sin ningún parámetro. ¿Hay alguna solución para solucionarlo? Uso inyección de dependencia pero no se puede usar para atributos. ¿Cómo puedo usarlo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En lugar de resolver en la construcción, ActionExecutingContext.HttpContext.RequestServices debería brindarle una referencia al contenedor de servicios de la solicitud en el momento de la solicitud.

Entonces:

 public override void OnActionExecuting(ActionExecutingContext filterContext) { var svc = filterContext.HttpContext.RequestServices; var memCache = svc.GetService<IMemoryCache>(); //..etc
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda