2

我正在使用EntityFrameworkCore 2.0.0-preview2-final,並且我想將ApplicationDbContext注入Startup類中的Configure方法。將ApplicationDbContext注入Startup中的Configure方法

這裏是我的代碼:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ApplicationDbContext context) 
{ 
    // rest of my code 
} 

但是當我跑我的應用我收到一條錯誤消息:

System.InvalidOperationException:不能解決範圍的服務 「ProjectName.Models.ApplicationDbContext '來自根提供者。

這裏也是我的代碼ConfigureServices方法:

​​

你有什麼想法,我怎麼能解決這個問題?

回答

0

嘗試

public void Configure(
     IApplicationBuilder app, 
     IHostingEnvironment env, 
     ILoggerFactory loggerFactory) 
{ 
    var db = app.ApplicationServices.GetService<ApplicationDbContext>(); 
} 
2

EF核心DbContext與範圍的生活方式註冊。在ASP本地DI容器作用域連接到IServiceProvider的實例。通常情況下,當您使用控制器中的DbContext時,不會出現問題,因爲ASP會爲每個請求創建新範圍(IServiceProvider的新實例),然後使用它來解決此請求中的所有問題。但是,在應用程序啓動期間,您沒有請求範圍,所以您應該自己創建範圍。你可以這樣說:

var scopeFactory = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>(); 
using (var scope = scopeFactory.CreateScope()) 
{ 
    var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>(); 
    // rest of your code 
} 

編輯

由於davidfowl指出,這將在2.0.0 RTM工作,因爲範圍的服務提供商將爲Configure方法來創建。

相關問題