我有一个基于 ASP.NET Core 3.1 的应用程序。我通常会注册我的 DbContext
使用这样的东西
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(scope =>
{
scope.UseMySql(Configuration.GetConnectionString("ConnectionString"));
});
// ...
}
但是,在这种情况下,我尝试使用 OrchardCore它建立在 ASP.NET Core 3.1 框架之上。我需要使用 IDbConnectionAccessor
服务给我一个 DbConnection
的实例.所以,我可以注册 AppDbContext
,我想检索 IDbConnectionAccessor
.
我试过了
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(scope =>
{
var accessor = scope.GetRequiredService<IDbConnectionAccessor>();
scope.UseMySql(accessor.CreateConnection());
});
// ...
}
但行 var accessor = scope.GetRequiredService<IDbConnectionAccessor>();
给我以下错误
Error CS1929 'DbContextOptionsBuilder' does not contain a definition for 'GetRequiredService' and the best extension method overload 'ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider)' requires a receiver of type 'IServiceProvider'
如何获取 IDbConnectionAccessor
的实例?在 AppDbContext
之前注册了吗?
最佳答案
AddDbContext
带有 overload对于同时采用 IServiceProvider
和 DbContextOptionsBuilder
的回调。
这是一个展示如何使用它的例子:
services.AddDbContext<AppDbContext>((sp, options) =>
{
var dbConnectionAccessor = sp.GetRequiredService<IDbConnectionAccessor>();
options.UseMySql(dbConnectionAccessor.CreateConnection());
});
关于c# - 我可以在向服务添加 DbContext 之前从容器获取服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597305/