亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET?Core中的通用主機(jī)HostBuilder

 更新時(shí)間:2022年04月07日 14:36:24   作者:暗斷腸  
這篇文章介紹了ASP.NET?Core中的通用主機(jī)HostBuilder,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.前言

ASP.NET Core應(yīng)用程序可以配置和啟動(dòng)主機(jī)(Host)。主機(jī)負(fù)責(zé)應(yīng)用程序啟動(dòng)和生命周期管理。通用主機(jī)用于無法處理HTTP請(qǐng)求的應(yīng)用程序。通用主機(jī)的用途是將HTTP管道從Web主機(jī)API中分離出來,從而啟用更多的主機(jī)方案。 基于通用主機(jī)的消息、后臺(tái)任務(wù)和其他非HTTP工作負(fù)載可從橫切功能(如配置、依賴關(guān)系注入[DI]和日志記錄)中受益。通用主機(jī)是ASP.NET Core 2.1中的新增功能,不適用于Web承載方案。對(duì)于Web承載方案,請(qǐng)使用Web主機(jī)。通用主機(jī)將在未來版本中替換Web主機(jī),并在HTTP和非HTTP方案中充當(dāng)主要的主機(jī)API。

2.介紹

IHostedService是執(zhí)行代碼的入口點(diǎn)。每個(gè)IHostedService實(shí)現(xiàn)都按照ConfigureServices中服務(wù)注冊(cè)的順序執(zhí)行。主機(jī)啟動(dòng)時(shí),每個(gè)IHostedService上都會(huì)調(diào)用StartAsync,主機(jī)正常關(guān)閉時(shí),以反向注冊(cè)順序調(diào)用StopAsync。

3.設(shè)置主機(jī)

IHostBuilder是供庫(kù)和應(yīng)用程序初始化、生成和運(yùn)行主機(jī)的主要組件:

public static async Task Main(string[] args)
{
    var host = new HostBuilder().Build();
    await host.RunAsync();
}

4.選項(xiàng)

HostOptions配置IHost的選項(xiàng)。

4.1關(guān)閉超時(shí)值

ShutdownTimeout設(shè)置StopAsync的超時(shí)值。默認(rèn)值為5秒。Program.Main中的以下選項(xiàng)配置將默認(rèn)值為5秒的關(guān)閉超時(shí)值增加至20秒:

var host = new HostBuilder().ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    })
    .Build();

5.默認(rèn)服務(wù)

在主機(jī)初始化期間注冊(cè)以下服務(wù):

  • 環(huán)境 (IHostingEnvironment)
  • HostBuilderContext
  • 配置 (IConfiguration)
  • IApplicationLifetime (ApplicationLifetime)
  • IHostLifetime (ConsoleLifetime)
  • IHost
  • 選項(xiàng) (AddOptions)
  • 日志記錄 (AddLogging)

6.主機(jī)配置

主機(jī)配置的創(chuàng)建方式如下:

  • 調(diào)用IHostBuilder上的擴(kuò)展方法以設(shè)置“內(nèi)容根”和“環(huán)境”。
  • 從ConfigureHostConfiguration中的配置提供應(yīng)用程序讀取配置。
  • 應(yīng)用程序鍵(名稱)、內(nèi)容根、環(huán)境配置方式我就不多說了,跟上一篇Web主機(jī)配置是一樣的。

6.1ConfigureHostConfiguration

ConfigureHostConfiguration使用IConfigurationBuilder來為主機(jī)創(chuàng)建IConfiguration。主機(jī)配置用于初始化IHostingEnvironment,以供在應(yīng)用程序的構(gòu)建過程中使用。可多次調(diào)用ConfigureHostConfiguration,并得到累計(jì)結(jié)果。必須在ConfigureHostConfiguration中顯式指定應(yīng)用程序所需的任何配置提供自身,包括:

  • 文件配置(例如,來自hostsettings.json文件)。
  • 環(huán)境變量配置。
  • 命令行參數(shù)配置。
  • 任何其他所需的配置提供程序。

通過使用SetBasePath指定應(yīng)用程序的基本路徑,然后調(diào)用其中一個(gè)文件配置提供應(yīng)用程序,可以啟用主機(jī)的文件配置。示例應(yīng)用使用JSON文件hostsettings.json,并調(diào)用AddJsonFile來使用文件的主機(jī)配置設(shè)置。要添加主機(jī)的環(huán)境變量配置,請(qǐng)?jiān)谥鳈C(jī)生成器上調(diào)用 AddEnvironmentVariables。AddEnvironmentVariables接受用戶定義的前綴(可選)。示例應(yīng)用程序使用前綴PREFIX_。當(dāng)系統(tǒng)讀取環(huán)境變量時(shí),便會(huì)刪除前綴。配置示例應(yīng)用程序的主機(jī)后,PREFIX_ENVIRONMENT的環(huán)境變量值就變成environment密鑰的主機(jī)配置值。示例HostBuilder配置使用ConfigureHostConfiguration:

var host = new HostBuilder().ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    })

6.2ConfigureAppConfiguration

通過在IHostBuilder實(shí)現(xiàn)上調(diào)用ConfigureAppConfiguration創(chuàng)建應(yīng)用程序配置。ConfigureAppConfiguration使用IConfigurationBuilder來為應(yīng)用程序創(chuàng)建IConfiguration。可多次調(diào)用ConfigureAppConfiguration,并得到累計(jì)結(jié)果。應(yīng)用程序使用上一次在一個(gè)給定鍵上設(shè)置值的選項(xiàng)。HostBuilderContext.Configuration中提供ConfigureAppConfiguration創(chuàng)建的配置,以供進(jìn)行后續(xù)操作和在Services中使用。應(yīng)用程序配置會(huì)自動(dòng)接收ConfigureHostConfiguration提供的主機(jī)配置。示例應(yīng)用配置使用ConfigureAppConfiguration:

var host = new HostBuilder().ConfigureAppConfiguration((hostContext, configApp) =>
    {
        configApp.SetBasePath(Directory.GetCurrentDirectory());
        configApp.AddJsonFile("appsettings.json", optional: true);
        configApp.AddJsonFile(
            $"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json",
            optional: true);
        configApp.AddEnvironmentVariables(prefix: "PREFIX_");
        configApp.AddCommandLine(args);
    })

6.3ConfigureServices

ConfigureServices將服務(wù)添加到應(yīng)用程序的依賴關(guān)系注入容器??啥啻握{(diào)用ConfigureServices,并得到累計(jì)結(jié)果。托管服務(wù)是一個(gè)類,具有實(shí)現(xiàn)IHostedService接口的后臺(tái)任務(wù)邏輯。示例應(yīng)用程序使用AddHostedService擴(kuò)展方法向自身添加生命周期事件 LifetimeEventsHostedService和定時(shí)后臺(tái)任務(wù)TimedHostedService服務(wù):

var host = new HostBuilder()
    .ConfigureServices((hostContext, services) =>
    {
        if (hostContext.HostingEnvironment.IsDevelopment())
        {
            // Development service configuration
        }
        else
        {
            // Non-development service configuration
        }
        services.AddHostedService<LifetimeEventsHostedService>();
        services.AddHostedService<TimedHostedService>();
})

6.4ConfigureLogging

ConfigureLogging添加了一個(gè)委托來配置提供的ILoggingBuilder??梢岳孟嗉咏Y(jié)果多次調(diào)用 ConfigureLogging。

var host = new HostBuilder().ConfigureLogging((hostContext, configLogging) =>
    {
        configLogging.AddConsole();
        configLogging.AddDebug();
    })

6.4.1UseConsoleLifetime

UseConsoleLifetime偵聽Ctrl+C/SIGINT或SIGTERM并調(diào)用StopApplication來啟動(dòng)關(guān)閉進(jìn)程。UseConsoleLifetime解除阻止RunAsync和WaitForShutdownAsync等擴(kuò)展。ConsoleLifetime預(yù)注冊(cè)為默認(rèn)生命周期實(shí)現(xiàn),使用注冊(cè)的最后一個(gè)生命周期。

var host = new HostBuilder().UseConsoleLifetime()

7.容器配置

主機(jī)可以接受IServiceProviderFactory<TContainerBuilder>。提供工廠不屬于DI容器注冊(cè),而是用于創(chuàng)建具體DI容器的主機(jī)內(nèi)部函數(shù)。UseServiceProviderFactory(IServiceProviderFactory<TContainerBuilder>)重寫用于創(chuàng)建應(yīng)用程序的服務(wù)提供程序的默認(rèn)工廠。ConfigureContainer方法托管自定義容器配置。ConfigureContainer提供在基礎(chǔ)主機(jī)API的基礎(chǔ)之上配置容器的強(qiáng)類型體驗(yàn)??梢岳孟嗉咏Y(jié)果多次調(diào)用ConfigureContainer。

為應(yīng)用程序創(chuàng)建服務(wù)容器并提供服務(wù)容器工廠:

public class GenericHostSample
{
    internal class ServiceContainerFactory : IServiceProviderFactory<ServiceContainer>
    {
        public ServiceContainer CreateBuilder(IServiceCollection services)
        {
            return new ServiceContainer();
        }
        public IServiceProvider CreateServiceProvider(ServiceContainer containerBuilder)
        {
            throw new NotImplementedException();
        }
    }
}

使用該工廠并為應(yīng)用程序配置自定義服務(wù)容器:

var host = new HostBuilder().UseServiceProviderFactory<ServiceContainer>(new ServiceContainerFactory())
    .ConfigureContainer<ServiceContainer>((hostContext, container) =>{
})

8.擴(kuò)展性

在IHostBuilder上使用擴(kuò)展方法實(shí)現(xiàn)主機(jī)擴(kuò)展性。應(yīng)用程序建立UseHostedService擴(kuò)展方法,以注冊(cè)在T中傳遞的托管服務(wù):

public static class Extensions
{
    public static IHostBuilder UseHostedService<T>(this IHostBuilder hostBuilder)
        where T : class, IHostedService, IDisposable
    {
        return hostBuilder.ConfigureServices(services =>
            services.AddHostedService<T>());
    }
}

9.管理主機(jī)

IHost實(shí)現(xiàn)負(fù)責(zé)啟動(dòng)和停止由服務(wù)容器中注冊(cè)的IHostedService實(shí)現(xiàn)。

9.1Run

Run運(yùn)行應(yīng)用程序并阻止調(diào)用線程,直到關(guān)閉主機(jī):

public class Program
{
    public void Main(string[] args)
    {
        var host = new HostBuilder().Build();
        host.Run();
    }
}

9.2RunAsync

RunAsync運(yùn)行應(yīng)用程序并返回在觸發(fā)取消令牌或關(guān)閉時(shí)完成的Task:

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder().Build();
        await host.RunAsync();
    }
}

9.3RunConsoleAsync

RunConsoleAsync啟用控制臺(tái)、生成和啟動(dòng)主機(jī),以及等待Ctrl+C/SIGINT或SIGTERM關(guān)閉。

public class Program
{
    public static async Task Main(string[] args)
    {
        var hostBuilder = new HostBuilder();
        await hostBuilder.RunConsoleAsync();
    }
}

9.4Start和StopAsync

Start同步啟動(dòng)主機(jī)。StopAsync嘗試在提供的超時(shí)時(shí)間內(nèi)停止主機(jī)。

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder().Build();
        using (host)
        {
            host.Start();
            await host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

9.5StartAsync和StopAsync

StartAsync啟動(dòng)應(yīng)用程序。StopAsync停止應(yīng)用程序。

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder().Build();
        using (host)
        {
            await host.StartAsync();
            await host.StopAsync();
        }
    }
}

9.6WaitForShutdown

WaitForShutdown通過IHostLifetime觸發(fā),例如ConsoleLifetime(偵聽Ctrl+C/SIGINT或SIGTERM)。WaitForShutdown調(diào)用StopAsync。

public class Program
{
    public void Main(string[] args)
    {
        var host = new HostBuilder().Build();
        using (host)
        {
            host.Start();
            host.WaitForShutdown();
        }
    }
}

9.7WaitForShutdownAsync

WaitForShutdownAsync返回在通過給定的令牌和調(diào)用StopAsync來觸發(fā)關(guān)閉時(shí)完成的Task。

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = new HostBuilder().Build();
        using (host)
        {
            await host.StartAsync();
            await host.WaitForShutdownAsync();
        }
    }
}

9.8External control(外部控件)

public class Program
{
    private IHost _host;
    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }
    public async Task StartAsync()
    {
        _host.StartAsync();
    }
    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

在StartAsync開始時(shí)調(diào)用WaitForStartAsync,在繼續(xù)之前,會(huì)一直等待該操作完成。它可用于延遲啟動(dòng),直到外部事件發(fā)出信號(hào)。

10.IHostingEnvironment、IApplicationLifetime接口

該兩個(gè)接口類型跟上一篇Web主機(jī)IHostingEnvironment、IApplicationLifetime接口類型是一樣的,詳情就不在這多講了,想要了解的請(qǐng)移步到上一篇Web主機(jī)文章。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET實(shí)現(xiàn)word文檔在線預(yù)覽功能代碼

    ASP.NET實(shí)現(xiàn)word文檔在線預(yù)覽功能代碼

    文檔管理系統(tǒng)需要實(shí)現(xiàn)WORD能在線預(yù)覽功能,以前覺得挺難的,經(jīng)過一番研究發(fā)現(xiàn),WORD自帶的另存為可以保存為HTMl文件。
    2010-07-07
  • ASP.NET?Core?MVC中的布局(Layout)

    ASP.NET?Core?MVC中的布局(Layout)

    這篇文章介紹了ASP.NET?Core?MVC中的布局(Layout),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET?Core?MVC中的視圖(Views)

    ASP.NET?Core?MVC中的視圖(Views)

    這篇文章介紹了ASP.NET?Core?MVC中的視圖(Views),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET中FileUpload文件上傳控件應(yīng)用實(shí)例

    ASP.NET中FileUpload文件上傳控件應(yīng)用實(shí)例

    本文主要介紹FileUpload文件上傳控件在實(shí)際開發(fā)中經(jīng)常遇到的問題并給出解決方法,希望對(duì)大家有所幫助。
    2016-04-04
  • ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    這篇文章介紹了ASP.NET Core應(yīng)用程序配置文件AppSetting.json,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET?Core命令行界面CLI用法

    ASP.NET?Core命令行界面CLI用法

    這篇文章介紹了ASP.NET?Core命令行界面CLI的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET Session使用詳解

    ASP.NET Session使用詳解

    Session是什么呢?簡(jiǎn)單來說就是服務(wù)器給客戶端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。
    2009-02-02
  • 部署ASP.NET?Core程序到Linux系統(tǒng)

    部署ASP.NET?Core程序到Linux系統(tǒng)

    這篇文章介紹了部署ASP.NET?Core程序到Linux系統(tǒng)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • ASP.NET中的Web控件介紹

    ASP.NET中的Web控件介紹

    這篇文章介紹了ASP.NET中的Web控件,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET?Core配置和管理Web主機(jī)

    ASP.NET?Core配置和管理Web主機(jī)

    這篇文章介紹了ASP.NET?Core配置和管理Web主機(jī)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論