快速了解如何在.NETCORE中使用Generic-Host建立主机

快速了解如何在.NETCORE中使用Generic-Host建立主机

这篇文章主要介绍了如何在NETCORE。中使用通用主机建立主机,文中代码非常详细,可供大家参考,感兴趣的朋友不妨阅读完

.NETCORE 中的 Generic Host

本文以自己在工作中学习和使用。网络核心通用主机作一个总结。

前言

在创建的ASPNETCORE项目中,我们可以在主()中看见,我们通过IWebHostBuild创建了一个IWebHost,而微软提供了网络主机CreateDefaultBuilder(参数)来帮助我们更轻松得创建网络主机。

常常我们的需求不需要创建网项目,比如后台任务,那么我们如何像使用AspNetCore一样创建控制台项目。

如何在控制台程序中创建主机

通过点网新控制台创建一个控制台项目

通过努格特添加以下包

微软。扩展。托管

首先,我们看下IHostBuilder接口里的方法

公共接口IHostBuilder

{

IHost Build();

IHostBuilder ConfigureAppConfiguration(ActionHostBuilderContext,IConfigurationBuilder configure delegate);

IHostBuilder ConfigureContainerTContainerBuilder(ActionHostBuilderContext,TContainerBuilder配置委托);

IHostBuilder ConfigureHostConfiguration(ActionIConfigurationBuilder配置委托);

IHostBuilder配置服务(ActionHostBuilderContext,IServiceCollection配置委托);

IHostBuilder UseServiceProviderFactoryTContainerBuilder(IServiceProviderFactoryTContainerBuilder工厂);

}

ConfigureAppConfiguration()可以配置应用的一些配置,如环境变量等等

配置容器()UseServiceProviderFactory()可以配置替换默认的依赖注入的组件,比如替换成Autofac

ConfigureHostConfiguration()可以配置图标配置

配置服务()可以注入服务

接下去,通过以下代码,我们可以构建一个简单的主机。

静态void Main(string[] args)

{

CreateDefaultHost(参数)。构建()。run();

}静态IHostBuilder CreateDefaultHost(string[]args)=新主机生成器()。配置主机配置(生成器=

{ //todo

})。ConfigureAppConfiguration((ctx,builder)=1

{

建设者。SetBasePath(AppContext .基本目录)。AddJsonFile(appsettings.json ,true,true)。AddJsonFile($appsettings .{ctx .托管环境。环境名称} . json ,真,真)。AddEnvironmentVariables()

})。ConfigureServices((ctx,services)=)

{

服务添加日志记录();

服务AddHostedServiceCustomHostService();

})。UseConsoleLifetime()

公共类CustomHostService:IHostedService { private I logger _ logger;私有任务执行任务公共任务启动异步(.) {

_logger .LogInformation($ { name of(CustomHostService):} start );

_executingTask=ExecuteAsync(.);if(_执行任务.已完成){ return _ executing task

}返回任务。已完成的任务;

}公共任务stop async(取消令牌取消令牌){返回任务.WhenAny(_executingTask,Task .延迟(超时.无限,取消令牌));

}公共任务执行异步(.) {

_logger .LogInformation($ {的名称(CustomHostService):正在执行} )返回任务。延时(5000);

}

}

如上,我们自定义的CustomHostService需要实现IHostedService接口,当然,我们可以直接继承后台服务类。

在实现了IHostedService接口后,我们通过服务AddHostedService()进行注入,或者通过服务AddTransientIHostedService,THostedService()进入注入。

启动以上项目,我们发现,我们的程序默认的托管环境一直是生产,那么如何修改呢?

配置环境变量

在AspNetCore项目中,我们可以通过设置环境变量ASPNETCORE _环境的值来指定主机环境变量的。而在通用主机中暂时没有这一项配置。

如果查看IHostBuilder的扩展,我们会发现以下方法:

新主机生成器()。UseContentRoot(.)。使用环境(.).

查看源代码后,我们可以通过ConfigureHostConfiguration()方法将这些配置配置到主机中。

现在我们假设我们以DOTNETCORE _环境来指定通用主机的环境。

新建主机构建器().配置主机配置(生成器=

{

建筑商AddInMemoryCollection(新字典字符串,字符串

{

[主机默认值。环境关键字]=环境获取环境变量( DOTNETCORE _ ENVIRONMENT ),

}) //Nuget:微软。扩展。配置。命令行

//.AddCommandLine(参数)

})

//.

现在让我们打开命令行测试下。设置完成环境变量后我们通过网络运行启动程序。查看输出,主机环境变成为阶段

# 设置环境变量$ env:DOTNETCORE _ ENVIRONMENT= Stage #查看环境变量$env:DOTNETCORE_ENVIRONMENT

当然我们也可以通过命令行的参数来设置启动的环境变量等值。

安装包微软。扩展。配置。命令行

在ConfigureHostConfiguration()中使用AddCommandLine(参数)来指定参数。

现在我们可以通过点网运行环境=开发来指定偏差环境了,此时我们发现我们终于成功加载appsettings .开发。json中的配置信息了。

使用Autofac来替代默认的国防情报部

简单认识一下Autofac

一个第三方的依赖注入容器,相对微软。扩展。依赖注入使用更加简单方便。

集成到Host中

通过努格特安装以下两个包

安装包Autofac

安装包Autofac .扩展。依赖部分

我们可以使用UseServiceProviderFactory()和服务AddAutofac()将默认的国防情报部替换成Autofac

使用ConfigureContainerContainerBuilder()可以使用Autofac来注入服务;

//省略了非关键代码静态ihost builder CreateDefaultHost(string[]args)=新主机生成器()//.略。ConfigureServices((ctx,services)=)

{

服务添加日志记录(x={ x . add console();});

服务AddAutofac();

})。ConfigureContainerContainerBuilder(生成器=

{

建筑商RegisterTypeCustomHostService()。AsIHostedService()。instance per dependency();

})。UseServiceProviderFactoryContainerBuilder(new AutofacServiceProviderFactory())//.略

总结

个人认为出现通用主机解决的几个痛点,相对AspNetCore中的管道机制,控制台程序如果不依靠通用主机来管理迪,想进行大量微软。扩展扩张包的集成会非常困难。通过IHostedService,可以方便的进行服务的托管。

以上就是使用通用主机的方法的详细内容,更多关于使用通用主机的资料请关注我们其它相关文章!

快速了解如何在.NETCORE中使用Generic-Host建立主机