• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

238
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 3 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 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda