簡體   English   中英

Asp.Net Core 2使用In Memory數據庫進行Prototyping獲取無法解析作用域服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM