gpt4 book ai didi

asp.net - ASP.NET MVC 6 中 FilterAttribute 内的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 17:11:25 26 4
gpt4 key购买 nike

我在 ASP.NET MVC 6(beta 4 版本)中遇到困难,试图在 AuthorizationFilterAttribute 类型的 Controller 过滤器属性中注入(inject)服务。

这是服务(它注入(inject)了另一个服务)

public class UsersTableRepository
{
private readonly NeurosgarContext _dbContext;

public UsersTableRepository(NeurosgarContext DbContext)
{
_dbContext = DbContext;
}

public ICollection<User> AllUsers
{
get
{
return _dbContext.Users.ToList();
}
}

//other stuff...
}

这是Startup类中的ConfigureServices方法,用于启用服务

  public void ConfigureServices(IServiceCollection services)
{
//...

services.AddSingleton<NeurosgarContext>(a => NeurosgarContextFactory.GetContext());
services.AddSingleton<UifTableRepository<Nazione>>();
services.AddSingleton<UsersTableRepository>();
}

一个简单的“虚拟” Controller ,上面定义了两个过滤器。您可以注意到,我已经通过使用 [FromServices] 装饰该属性,在该 Controller 内完成了 DI,并且它可以工作。

[Route("[controller]")]
[BasicAuthenticationFilter(Order = 0)]
[BasicAuthorizationFilter("Admin", Order = 1)]
public class DummyController : Controller
{

[FromServices]
public UsersTableRepository UsersRepository { get; set; }

// GET: /<controller>/
[Route("[action]")]
public IActionResult Index()
{
return View();
}
}

BasicAuthenticationFilter 中执行相同的 DI 不起作用,并且在运行时 UserRepository 属性是空引用。

public class BasicAuthenticationFilterAttribute : AuthorizationFilterAttribute
{
[FromServices]
public UsersTableRepository UsersRepository { get; set; }

public override void OnAuthorization(AuthorizationContext filterContext)

{
if (!Authenticate(filterContext.HttpContext))
{
// 401 Response
var result = new HttpUnauthorizedResult();
// Add the header for Basic authentication require
filterContext.HttpContext.Response.Headers.Append("WWW-Authenticate", "Basic");
filterContext.Result = result;

//if (!HasAllowAnonymous(context))
//{
// base.Fail(context);
//}
}
}
// ...
}

知道如何解决这个问题吗?

最佳答案

避免将依赖项注入(inject)属性,如所述 here 。让您的attributes passive ,或者将您的属性设为 humble object如上所述here .

关于asp.net - ASP.NET MVC 6 中 FilterAttribute 内的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com