无法在 Razor Pages 代码隐藏类中使用注入的类

Joh*_*nyL 1 dependency-injection asp.net-core razor-pages

我有一个简单的页面,仅显示电影列表。我注入DbContext到我的页面中:

列表.cshtml

@inject MovieContext Db
Run Code Online (Sandbox Code Playgroud)

并尝试在代码隐藏类中使用它:

列表.cshtml.cs

@inject MovieContext Db
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

当前上下文中不存在名称“Db”

我也尝试过使用[Inject]属性注入上下文,但这也不起作用:

public class ListModel : PageModel
{
    public IList<Movie> Movies { get; set; }

    public async Task OnGetAsync()
    {
        Movies = await Db.Movies.ToListAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

NullReferenceException:未将对象引用设置为对象的实例。

Yin*_*qiu 5

只需要直接在代码隐藏类中使用依赖注入即可,如下所示。

public class ListModel : PageModel
    {
        private readonly MovieContext _context;
        public ListModel(MovieContext context)
        {
            _context = context;
        }
        public IList<Movie> Movies { get; set; }

        public async Task OnGetAsync()
        {
            Movies = await _context.Movies.ToListAsync();
        }
    }
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,您可以查看文档

  • @JohnyL `InjectAttribute` 属于 Blazor。它位于“Microsoft.AspNetCore.Components”命名空间中,基本上就是 Blazor。它在 Razor Pages 中没有位置。 (2认同)