ASP.NET Core应用程序开发中如何在操作过滤器(Action Filter)实现服务的依赖注入?
2.22K 次浏览
在ASP.NET Core的应用程序开发中,现需要实现一个基于ActionFilterAttribute
的类EnsureUserLoggedIn
,并在EnsureUserLoggedIn
中通过依赖注入某些特定的服务接口,如下:
public class EnsureUserLoggedIn : ActionFilterAttribute
{
private readonly ISessionService _sessionService;
public EnsureUserLoggedIn(ISessionService sessionService)
{
_sessionService = sessionService;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
// 问题: _sessionService 始终为null
if (_sessionService.LoggedInUser == null)
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
context.Result = new JsonResult("Unauthorized");
}
}
}
Startup.cs 注入的服务为:
services.AddScoped<ISessionService, SessionService>();
控制器调用示例代码为:
[Route("api/issues"), EnsureUserLoggedIn]
public class IssueController : Controller
{
}
正如上面代码中的注释描述,其中过滤器中的_sessionService
始终为null,说明依赖注入的服务实例并没有成功。
那么,在ASP.NET Core应用程序中,如何实现过滤器的服务依赖注入呢?