代码之家  ›  专栏  ›  技术社区  ›  nop

UseConsoleLifetime是否默认包含在中。NET通用主机(Host.CreateDefaultBuilder)?

  •  1
  • nop  · 技术社区  · 1 年前

    我最初使用配置了控制台应用程序。NET通用主机,如下所示:

    var builder = new HostBuilder()
        .ConfigureServices((hostContext, services) =>
        {
            services.AddLogging();
        })
        .ConfigureLogging((hostContext, configLogging) =>
        {
            configLogging.AddConsole();
        })
        .UseConsoleLifetime()
        .Build();
    
    await builder.RunAsync();
    

    然后我意识到我也需要 appsettings.json appsettings.{Environment}.json ,这让我决定使用 Host.CreateDefaultBuilder ,因为它包括默认的日志记录、appsettings和其他一些默认值:

    var host = Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
        })
        .UseConsoleLifetime() // Is this line necessary?
        .Build();
    

    现在我想知道UseConsoleLifetime是否真的包含在默认生成器中。我无法通过反编译几个源代码文件找到它,但为了确定,我决定问这个问题。

    以下是Microsoft文档:

    1 回复  |  直到 1 年前
        1
  •  1
  •   Guru Stron    1 年前

    是的。唯一的 UseConsoleLifetime 实际上是注册的 ConsoleLifetime IHostLifetime 控制台生存时间 是默认值。来自 generic hosting docs :

    Microsoft.Extensions.Hosting.Internal.ConsoleLifetime 是默认值 I主机寿命 实施

    而且很容易检查:

    var builder = Host.CreateDefaultBuilder();
    var build = builder.Build();
    Console.WriteLine(build.Services.GetService<IHostLifetime>() is ConsoleLifetime); // prints "True"
    

    如果您想知道生存期默认设置在哪里,请参阅 AddLifetime 调用 HostBuilder.PopulateServiceCollection 两者都由调用 HostBuilder 本身(即。 Host.CreateDefaultBuilder HostApplicationBuilder (即。 Host.CreateApplicationBuilder() ).

    同时考虑使用 主办创建应用程序生成器() 因为它似乎更符合设置应用程序的方法。

    推荐文章