![](/img/trans.png)
[英]Using a Scoped service in a Singleton in an Asp.Net Core app
[英]Asp.Net Core 2 Using In memory database for Prototyping getting Cannot resolve scoped service
我正在使用Asp.Net Core 2和Entity Framework Core 2,使用代碼優先開發。 我正在嘗試設置一個在startup.cs中調用的內存數據庫,所以我不必擔心是否有人更改了模型,然后因為我還在進行原型設計而不得不更新數據庫。 我試圖關注的文章是https://stormpath.com/blog/tutorial-entity-framework-core-in-memory-database-asp-net-core
我可以讓文章在Core 1中工作,然后如果我將軟件包升級到核心2之后仍然有效,但我目前正在處理的項目已經在核心2中,當我嘗試調用時我仍然遇到錯誤var context = app.ApplicationServices.GetService<ApiContext>();
。 我得到的錯誤是
System.InvalidOperationException:'無法從根提供程序解析作用域服務'TestWebsite.DA.Repositories.ApiContext'。
該例外中的消息是。
無法從根提供程序解析作用域服務“TestWebsite.DA.Repositories.ApiContext”。
我在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
注入到configure方法中,使其簽名如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
那么你應該能夠做到:
var context = serviceProvider.GetService<ApiContext>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.