【问题标题】:DbContext connection string and hosted serviceDbContext 连接字符串和托管服务
【发布时间】:2019-02-05 15:54:00
【问题描述】:

我有一个。 NET 核心控制台应用程序,它实现了 IHostedService 和对具有 DbContext 定义的另一个项目的引用。 这是控制台应用程序中 DbContext 的配置:

IHost host = new HostBuilder()
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddEnvironmentVariables(prefix: "ASPNETCORE_");
        configHost.AddCommandLine(args);
    })
.ConfigureAppConfiguration((hostContext, configApp) =>
{
    configApp.SetBasePath(Directory.GetCurrentDirectory());
    configApp.AddEnvironmentVariables(prefix: "ASPNETCORE_");
    configApp.AddJsonFile($"appsettings.json", true);
    configApp.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true);
    configApp.AddCommandLine(args);
}) 
.ConfigureServices((hostContext, services) =>
{
    services.AddDbContext<MyAppDbContext>(options => options.UseNpgsql(hostContext.Configuration.GetConnectionString("DefaultConnection")));

    services.AddHostedService<ApplicationLifetimeHostedService>();
})
.Build();

现在,在 ApplicationLifetimeHostedService 的 OnStarted() 方法中,我有:

using (var _context = new MyAppDbContext())
{
    ...
    _context.SaveChanges();
}

为什么 MyAppDbContext 从 dbcontext 定义类的 OnConfiguring 方法中获取连接字符串值(硬编码,从脚手架生成),而不是从 appsettings.{ASPNETCORE_ENVIROMENT}.json ()?

提前感谢您!

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    根据您的配置,目前IHostBuilder 用于非Web 应用程序并模拟通用配置,最终这将取代IWebHostBuilder。但是,您不需要这些...在您的情况下,使用CreateDefaultBuilder 会更好。

    • 主机配置
    • 应用配置

    两者都是默认提供的,具有更精细的控制。主要项目是构建器提供的默认服务以及它们编译或构建的内容。

    但要直接回答您的问题,在您的顶行中,您缺少以下内容:

     var host = new HostBuilder()
         .ConfigureHostConfiguration(configuration => 
         {
             // For brevity, removed some.
             configuration.AddJsonFile("appsettings.json", false, true);
         }
    

    这就是您的appsettings.json 不起作用的原因。 ConfigureHostConfiguration 将传递到 ConfigureAppConfiguration

    主机配置自动流向应用配置 (ConfigureAppConfiguration 和应用程序的其余部分)。

    默认情况下不包括任何提供程序。您必须明确指定 应用程序需要的任何配置提供程序 配置主机配置,包括:

    • 文件配置(例如,来自 hostsettings.json 文件)。
    • 环境变量配置。
    • 命令行参数配置。
    • 任何其他必需的配置提供程序。

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2021-02-03
      相关资源
      最近更新 更多