【问题标题】:Unable to resolve service DbContext while attempting to activate controller尝试激活控制器时无法解析服务 DbContext
【发布时间】:2022-01-26 12:55:55
【问题描述】:

我有自己的DbContext:

public class DreamsContext : DbContext
{
    public DbSet<UserAccount> UserAccounts { get; set; }
    public DbSet<DreamPublication> DreamPublications { get; set; }

    public DreamsContext(DbContextOptions<DreamsContext> options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserAccount>().ToTable("dreams_user");
        modelBuilder.Entity<DreamPublication>().ToTable("dream_publications");

        base.OnModelCreating(modelBuilder);
    }
}

其中UserAccountDreamPublication 仅包含几个带有get 和set 的字段。

在我的启动中,我为DbContext 添加了这个:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<Models.DreamsContext>(options =>
                options.UseSqlServer("server = SCAT\\SQLEXPRESS; database = dreams_web; Trusted_Connection=True ; MultipleActiveResultSets = true"));
}

然后我尝试使用 DI 将我的 DbContext 注入控制器:

private readonly Models.DreamsContext _context;

public SignUpController (Models.DreamsContext dbContext)
{
    _context = dbContext;
}

但是当我试图在这个上下文中做某事时,我得到了一个异常:

在尝试激活“(我的控制器)”时无法解析类型“(我的 DbContext)”的服务

我不知道该怎么做,在 MSDN 上他们就是这样做的,一切正常

更新。这是控制台里写的

System.InvalidOperationException: Unable to resolve service for type 'DreamWeb.Models.DreamsContext' while attempting to activate 'DreamWeb.Controllers.SignUpController'.
         at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
         at lambda_method25(Closure , IServiceProvider , Object[] )
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass7_0.<CreateActivator>b__0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

【问题讨论】:

  • 你还需要依赖注入你的控制器
  • 代码为DreamsContext,错误为My DbContext
  • 请发布完整的堆栈跟踪。您是在构建 ASP.NET Core 应用程序还是 ASP NET(经典)应用程序?
  • @Steven it' ASP.NET 核心

标签: c# asp.net asp.net-mvc entity-framework dependency-injection


【解决方案1】:

主要问题是我试图在 Startup 类中配置服务,而我正在使用 asp.net CORE,所以主要的魔力在 program.cs 我将所有内容移至 program.cs,一切正常。花了我几天的时间,即使是这样一个小错误

https://docs.microsoft.com/en-us/dotnet/architecture/porting-existing-aspnet-apps/app-startup-differences

据此,startup 应该继续在 asp.net core 中工作,但我遇到了问题

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2020-08-21
    • 2022-09-24
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多