InvalidOperationException:尝试激活时无法解析类型“...Context”的服务

问题描述 投票:0回答:1

我的项目正在使用 asp.net core razor Pages 和 dotnet 7 构建 我已经考虑过为数据库建立一个单独的层,并且我的数据库是按照数据库优先方法构建的

连接字符串写在appsettings.json中,通过数据层的program.cs添加到服务中 然后,在应用层,我引用了数据层,在app层的program.cs中添加了以下命令

builder.Services.AddScoped<DbkabirContext, DbkabirContext>();

这是数据层中的Program.cs: 我的连接字符串位于 appsettings.json 中,名称为 DbkabirConnectionString

using KabirLang.Data.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<DbkabirContext>(options =>
{
    options.UseSqlServer("Name=DbkabirConnectionString");
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();

这是应用层中的Program.cs:

using KabirLang.Data.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddScoped<DbkabirContext, DbkabirContext>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();

在页面模型中运行程序后,我从上下文中得到一个空值:

我有两个问题,请指导我: 1- 错误的原因是什么?我的工作中问题出在哪里? 2-我将数据库、模型和连接放在与应用程序层不同的层中并引用应用程序层的这种方法,对于软件数据库的安全性和稳定性是否合适,您是否推荐? 谢谢

如果我删除此代码 builder.Services.AddScoped(); 从应用程序层中的program.cs,我收到以下错误:

An unhandled exception occurred while processing the request.
InvalidOperationException: Unable to resolve service for type 'KabirLang.Data.Models.DbkabirContext' while attempting to activate 'KabirLang.Pages.LevelTestListModel'.
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)
asp.net-core entity-framework-core razor-pages
1个回答
0
投票

整个框架核心不需要“AddScoped();”

实际上依赖注入的用法应该是

db=context
而不是“context=db”。 “db”是您在控制器中创建的新实例。

参考:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0#overview-of-dependency-injection

© www.soinside.com 2019 - 2024. All rights reserved.