gpt4 book ai didi

c# - Asp.Net Core 2 使用内存数据库进行原型(prototype)制作无法解析作用域服务

转载 作者:太空狗 更新时间:2023-10-30 00:17:59 24 4
gpt4 key购买 nike

我正在使用代码优先开发的 Asp.Net Core 2 和 Entity Framework Core 2。我正在尝试设置一个在 startup.cs 中调用的内存数据库,所以我不必担心如果有人更改模型,然后必须更新数据库,因为我仍在原型(prototype)设计中。我试图关注的文章是 https://stormpath.com/blog/tutorial-entity-framework-core-in-memory-database-asp-net-core

我可以让这篇文章在核心 1 中工作,然后如果我将包升级到核心 2 之后仍然可以工作,但我目前正在处理的项目已经在核心 2 中,当我试着打电话 var context = app.ApplicationServices.GetService<ApiContext>(); .我得到的错误是

System.InvalidOperationException: 'Cannot resolve scoped service 'TestWebsite.DA.Repositories.ApiContext' from root provider.'

该异常中的消息是。

Cannot resolve scoped service 'TestWebsite.DA.Repositories.ApiContext' from root provider.

我在 startup.cs 中更改的代码如下。

    public void ConfigureServices(IServiceCollection services)
{
AutoMapperConfiguration.Configure();
services.AddDbContext<ApiContext>(opt => opt.UseInMemoryDatabase("TestDatabase"));
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}


var context = app.ApplicationServices.GetService<ApiContext>();
AddTestData(context);

app.UseStaticFiles();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

我想知道我正在关注的文章是否是在实体核心 2 中执行此操作的最佳方法,或者是否有更好的方法,如果有更好的方法可能是什么。

最佳答案

IServiceProvider serviceProvider 注入(inject)到您的配置方法中,使其签名如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)

然后你应该能够做到:

var context = serviceProvider.GetService<ApiContext>();

关于c# - Asp.Net Core 2 使用内存数据库进行原型(prototype)制作无法解析作用域服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46547108/

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