最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1.前言

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

2.介紹

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

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

IHostBuilder是供庫和應(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ī)初始化期間注冊以下服務(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)境變量配置,請?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ù)注冊為默認(rèn)生命周期實(shí)現(xiàn),使用注冊的最后一個(gè)生命周期。

var host = new HostBuilder().UseConsoleLifetime()

7.容器配置

主機(jī)可以接受IServiceProviderFactory<TContainerBuilder>。提供工廠不屬于DI容器注冊,而是用于創(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ò)展方法,以注冊在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ù)容器中注冊的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ā)出信號。

10.IHostingEnvironment、IApplicationLifetime接口

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

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

相關(guān)文章

  • .NET6一些常用組件的配置及使用

    .NET6一些常用組件的配置及使用

    本文詳細(xì)講解了.NET6一些常用組件的配置及使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • ASP.NET中 TextBox 文本輸入框控件的使用方法

    ASP.NET中 TextBox 文本輸入框控件的使用方法

    TextBox 控件為用戶提供了一種向 ASP.NET 網(wǎng)頁中鍵入信息(包括文本、數(shù)字和日期)的方法。
    2016-04-04
  • ASP.NET?Core基礎(chǔ)之Startup類

    ASP.NET?Core基礎(chǔ)之Startup類

    這篇文章介紹了ASP.NET?Core基礎(chǔ)之Startup類,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net報(bào)表開發(fā)控件XtraReport介紹

    .Net報(bào)表開發(fā)控件XtraReport介紹

    這篇文章介紹了.Net報(bào)表開發(fā)控件XtraReport,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • .Net行為型設(shè)計(jì)模式之命令模式(Command)

    .Net行為型設(shè)計(jì)模式之命令模式(Command)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之命令模式(Command),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • .NET?6更新使.NET生態(tài)系統(tǒng)蛻變

    .NET?6更新使.NET生態(tài)系統(tǒng)蛻變

    微軟正式發(fā)布.NET最新長期支持版本.NET?6,這個(gè)版本的更新重點(diǎn),除了C#和F#都有許多語言功能改進(jìn)之外,.NET?6終于集大成,成為跨瀏覽器、云計(jì)算、桌面、物聯(lián)網(wǎng)和移動(dòng)應(yīng)用程序的統(tǒng)一平臺(tái),性能也獲得大幅提升,并且更完整支持Arm64
    2022-01-01
  • asp.net中將某字符串切割成陣列并排序列出

    asp.net中將某字符串切割成陣列并排序列出

    老師布置的另外一道題是將字符串"a;b;d;z;y;u"切割成陣列并排序列出。老師出這題也許是讓Insus.NET掌握或復(fù)習(xí)Array.Sort()函數(shù),不管怎樣,先按自己的想法實(shí)現(xiàn),然后是等老師的意見
    2012-05-05
  • ASP.NET Core MVC中的局部視圖用法

    ASP.NET Core MVC中的局部視圖用法

    這篇文章介紹了ASP.NET Core MVC局部視圖的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET中DropDownList下拉框列表控件綁定數(shù)據(jù)的4種方法

    ASP.NET中DropDownList下拉框列表控件綁定數(shù)據(jù)的4種方法

    本文主要介紹了DropDownList控件4種綁定數(shù)據(jù)的基礎(chǔ)用法,希望對大家能有所幫助。
    2016-04-04
  • .Net中Task Parallel Library的基本用法

    .Net中Task Parallel Library的基本用法

    這篇文章介紹了.Net中Task Parallel Library的基本用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10

最新評論

疏勒县| 三江| 安福县| 恭城| 凤冈县| 天祝| 汉中市| 新乐市| 乾安县| 宝清县| 成武县| 镶黄旗| 台安县| 临邑县| 乌拉特中旗| 新兴县| 辽宁省| 大洼县| 鄂伦春自治旗| 阳江市| 丽水市| 肃南| 芮城县| 金坛市| 玛沁县| 东乌珠穆沁旗| 明光市| 青神县| 吉木萨尔县| 团风县| 平遥县| 邹平县| 镶黄旗| 兰西县| 西城区| 清远市| 遵义市| 四川省| 望江县| 喀喇沁旗| 奇台县|