我可以在向服务添加 DbContext 之前从容器获取服务吗?
Can I get a service from container before adding a DbContext to the services?
我有一个 ASP.NET 基于 Core 3.1 的应用程序。我通常会使用这样的方式注册我的 DbContext
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(scope =>
{
scope.UseMySql(Configuration.GetConnectionString("ConnectionString"));
});
// ...
}
但是,在这种情况下,我尝试使用构建在 ASP.NET Core 3.1 框架之上的 OrchardCore。我需要使用 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'
如何在 AppDbContext
注册之前获得 IDbConnectionAccessor
的实例?
AddDbContext
附带一个 overload 用于同时接受 IServiceProvider
和 DbContextOptionsBuilder
的回调。
下面是一个演示如何使用它的示例:
services.AddDbContext<AppDbContext>((sp, options) =>
{
var dbConnectionAccessor = sp.GetRequiredService<IDbConnectionAccessor>();
options.UseMySql(dbConnectionAccessor.CreateConnection());
});
我有一个 ASP.NET 基于 Core 3.1 的应用程序。我通常会使用这样的方式注册我的 DbContext
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(scope =>
{
scope.UseMySql(Configuration.GetConnectionString("ConnectionString"));
});
// ...
}
但是,在这种情况下,我尝试使用构建在 ASP.NET Core 3.1 框架之上的 OrchardCore。我需要使用 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'
如何在 AppDbContext
注册之前获得 IDbConnectionAccessor
的实例?
AddDbContext
附带一个 overload 用于同时接受 IServiceProvider
和 DbContextOptionsBuilder
的回调。
下面是一个演示如何使用它的示例:
services.AddDbContext<AppDbContext>((sp, options) =>
{
var dbConnectionAccessor = sp.GetRequiredService<IDbConnectionAccessor>();
options.UseMySql(dbConnectionAccessor.CreateConnection());
});