2017-10-03 3 views
1

私は、コードの最初の開発を使用して、Asp.Net Core 2 with Entity Framework Core 2を使用しています。 startup.csで呼び出されるメモリ内のデータベースをセットアップしようとしています。誰かがモデルを変更しても、まだプロトタイプを作成しているので、データベースを更新する必要はありません。私が従おうとしていた記事は、https://stormpath.com/blog/tutorial-entity-framework-core-in-memory-database-asp-net-coreAsp.Net Core 2プロトタイプ作成のためのメモリデータベースの使用スコープ付きサービスを解決できません

です。コア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またはそこに良い方法があり、それが何であってもよく、より良い方法があるかの場合にはそれを行うための最善の方法である場合、私は思っていました。

答えて

3

あなたのconfigureメソッドに注入IServiceProvider serviceProviderその署名は、次のようになりますので、:あなたは、その後行うことができるはず

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

var context = serviceProvider.GetService<ApiContext>(); 
関連する問題