gpt4 book ai didi

c# - 我可以在向服务添加 DbContext 之前从容器获取服务吗?

转载 作者:行者123 更新时间:2023-12-01 21:30:34 25 4
gpt4 key购买 nike

我有一个基于 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 definitionfor 'GetRequiredService' and the best extension method overload'ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider)'requires a receiver of type 'IServiceProvider'

如何获取 IDbConnectionAccessor 的实例?在 AppDbContext 之前注册了吗?

最佳答案

AddDbContext 带有 overload对于同时采用 IServiceProviderDbContextOptionsBuilder 的回调。

这是一个展示如何使用它的例子:

services.AddDbContext<AppDbContext>((sp, options) =>
{
var dbConnectionAccessor = sp.GetRequiredService<IDbConnectionAccessor>();
options.UseMySql(dbConnectionAccessor.CreateConnection());
});

关于c# - 我可以在向服务添加 DbContext 之前从容器获取服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com