ASP.NET Core 6:我试图为Razor页面创建一个IPageFilter
,这个过滤器将需要使用在DI容器中注册的ApplicationDbContext
.
在我的过滤器中,我在构造函数中注入了ApplicationDbContext
,但是当我用它装饰Razor页面时,它显示了一个错误,即我没有注入上下文.正确的方法是什么?
过滤器:
[AttributeUsage(AttributeTargets.Class)]
public class CustomPageFilterAttribute : Attribute, IAsyncPageFilter
{
protected ApplicationDbContext _db;
public CustomPageFilterAttribute(ApplicationDbContext db)
{
_db = db;
}
public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
{
var something = _db.Customers.Find(1);
return Task.CompletedTask;
}
// Executes last
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
// Before action execution
await next();
// After action execution
}
}
Razor页面:
[CustomPageFilterAttribute]
public class ConfigUsuarioModel : PageModel
{
private readonly ApplicationDbContext _db;
[BindProperty]
public ConfigUsuario _configUsuario { get; set; }
[TempData]
public string StatusMessage { get; set; }
//ctor
public ConfigUsuarioModel(ApplicationDbContext db)
{
_db = db;
}
}
在Program.cs个MVC项目中注册DbContext:
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString, sqlServerOptions => sqlServerOptions.CommandTimeout(90)));
intellisense标记用[CustomPageFilterAttribute]
装饰PageModel时的错误:
没有给定的参数对应于所需参数 'db'of 'CustomPageFilterAttribute. CustomePageFilterAttribute(ApplicationDbContext)'