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

标签 c# asp.net-core entity-framework-core asp.net-core-3.1

我有一个基于 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对于同时采用 IServiceProviderDbContextOptionsBuilder 的回调。

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

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

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

相关文章:

c# - 设置 AutoGenerateColumns=true 并按数据类型自动转换

c# - .net 核心跨平台桌面应用程序

asp.net-core - 401初始错误未调用ASP.NET核心应用程序.UseStatusCodePagesWithReExecute

c# - 专门针对旧版本的单个 .NET Standard API/命名空间(Entity Framework Core)

entity-framework - Entity Framework 7 Code First 中的一对一关系

c# - 带有 .Net Core 的 Azure Active Directory

c# - 当我将 visible 正确设置为 true 时,如何防止我的 C# winforms 应用程序窃取焦点?

c# - 为 OwnesOne 导航属性创建索引

c# - 在将 C++ exe 转换为 dll 并将其用于 C# 后找到入口点

entity-framework - EF Core OnDelete 限制添加附加列