'NETCORE'에서 Generic-host 를 사용 하여 호스트 를 만 드 는 방법 을 빠르게 알 아 보기
6812 단어 .netGeneric-Host호스트 만 들 기
본 고 는 자신 이 업무 중 에.net core generic-host 를 배우 고 사용 하 는 것 으로 요약 한다.
머리말
만 든 ASPNETCORE 프로젝트 에서 우 리 는
Main()
에서 볼 수 있 습 니 다.우 리 는IWebHostBuild
을 통 해IWebHost
하 나 를 만 들 었 고 마이크로소프트 는WebHost.CreateDefaultBuilder(args)
를 제공 하여 우리 가 더욱 쉽게 만 들 수 있 도록 도와 주 었 습 니 다WebHost
.항상 우리 의 요 구 는 웹 프로젝트,예 를 들 어 배경 작업 을 만 들 필요 가 없습니다.그러면 우 리 는 어떻게 AspNetCore 를 사용 하 는 것 처럼 콘 솔 프로젝트 를 만 듭 니까?
어떻게 콘 솔 프로그램 에서 호스트 를 만 듭 니까?
dotnet new console
콘 솔 프로젝트 만 들 기Nuget 을 통 해 아래 패키지 추가
Microsoft.Extensions.Hosting
우선 인터페이스 에 있 는 방법 을 살 펴 보 자.
public interface IHostBuilder
{
IHost Build();
IHostBuilder ConfigureAppConfiguration(Action<HostBuilderContext, IConfigurationBuilder> configureDelegate);
IHostBuilder ConfigureContainer<TContainerBuilder>(Action<HostBuilderContext, TContainerBuilder> configureDelegate);
IHostBuilder ConfigureHostConfiguration(Action<IConfigurationBuilder> configureDelegate);
IHostBuilder ConfigureServices(Action<HostBuilderContext, IServiceCollection> configureDelegate);
IHostBuilder UseServiceProviderFactory<TContainerBuilder>(IServiceProviderFactory<TContainerBuilder> factory);
}
IHostBuilder
환경 변수 등 응용 설정 을 설정 할 수 있 습 니 다.ConfigureAppConfiguration()
&ConfigureContainer()
기본 의존 주입 구성 요 소 를 바 꿀 수 있 습 니 다.예 를 들 어 Autofac 로 바 꿀 수 있 습 니 다.UseServiceProviderFactory()
설정 가능ConfigureHostConfiguration()
IConfiguration
서비스 주입 가능다음 코드 를 통 해 우 리 는 간단 한 호스트 를 구축 할 수 있 습 니 다.
static void Main(string[] args)
{
CreateDefaultHost(args).Build().Run();
}static IHostBuilder CreateDefaultHost(string[] args) => new HostBuilder()
.ConfigureHostConfiguration(builder =>
{ //todo
})
.ConfigureAppConfiguration((ctx, builder) =>
{
builder
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json", true, true)
.AddEnvironmentVariables()
;
})
.ConfigureServices((ctx, services) =>
{
services.AddLogging();
services.AddHostedService<CustomHostService>();
})
.UseConsoleLifetime()
;
public class CustomHostService: IHostedService{ private ILogger _logger; private Task _executingTask; public Task StartAsync(...) {
_logger.LogInformation($"{nameof(CustomHostService):}start");
_executingTask = ExecuteAsync(...); if(_executingTask.IsCompleted){ return _executingTask;
} return Task.CompletedTask;
} public Task StopAsync(CancellationToken cancellationToken) { return Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken));
} public Task ExecuteAsync(...) {
_logger.LogInformation($"{nameof(CustomHostService):executing}") return Task.Delay(5000);
}
}
위 와 같이 우리 가 사용자 정의ConfigureServices()
는 CustomHostService
인 터 페 이 스 를 실현 해 야 한다.물론 우 리 는IHostedService
종 류 를 직접 계승 할 수 있다.BackgoundService
인 터 페 이 스 를 실현 한 후에 우 리 는 IHostedService
을 통 해 주입 하거나 services.AddHostedService<>()
을 통 해 주입 한다.이상 의 항목 을 시작 하면 우 리 는 우리 의 프로그램 이 기본
service.AddTransient<IHostedService,THostedService>()
으로 계속Hosting Environment
되 어 있다 는 것 을 알 게 되 었 습 니 다.그러면 어떻게 수정 합 니까?환경 변수 설정
AspNetCore 프로젝트 에서 저 희 는 환경 변수
Production
의 값 을 설정 하여 호스트 환경 변 수 를 지정 할 수 있 습 니 다.Generic Host 에 서 는 이 설정 이 잠시 없습니다.ASPNETCORE_ENVIRONMENT
의 확장 을 보면 다음 과 같은 방법 을 발견 할 수 있 습 니 다.
new HostBuilder()
.UseContentRoot(...)
.UseEnvironment(...) ...
원본 코드 를 본 후에 우 리 는IHostBuilder
방법 으로 이 설정 을 호스트 에 설정 할 수 있 습 니 다.지금 우 리 는 우리 가
ConfigureHostConfiguration()
로 GenericHost 의 환경 을 지정 한다 고 가정 합 니 다.
new HostBuilder().ConfigureHostConfiguration(builder =>
{
builder.AddInMemoryCollection(new Dictionary<string, string>
{
[HostDefaults.EnvironmentKey] = Environment.GetEnvironmentVariable("DOTNETCORE_ENVIRONMENT"),
}) // Nuget:Microsoft.Extensions.Configuration.CommandLine
//.AddCommandLine(args)
;
})
//...
이제 명령 행 을 열 어 테스트 해 봅 시다.환경 변 수 를 설정 한 후 프로그램 을 시작 합 니 다.출력 보기,Host Environment 변환DOTNETCORE_ENVIRONMENT
\#환경 변수 설정$env:DOTNETCOREENVIRONMENT='Stage'\#환경 변수 보기$env:DOTNETCOREENVIRONMENT물론 우 리 는 commandline 의 매개 변 수 를 통 해 시작 하 는 환경 변수 등 값 을 설정 할 수 있 습 니 다.
Install-Package Microsoft.Extensions.Configuration.CommandLine
dotnet run
에서 인 자 를 지정 하기 위해Stage
를 사용 합 니 다.이제 우 리 는
ConfigureHostConfiguration()
을 통 해 dev 환경 을 지정 할 수 있 습 니 다.이때 우 리 는 마침내.AddCommandLine(args)
의 설정 정 보 를 불 러 오 는 데 성공 했다 는 것 을 알 게 되 었 습 니 다.기본 DI 대신 Autofac 사용 하기
Autofac 를 간단하게 알 아 보 겠 습 니 다.
제3자 의 의존 주입 용 기 는 상대 적 으로
dotnet run --environment=Development
사용 이 더욱 간단 하고 편리 하 다.Host 에 통합
Nuget 을 통 해 아래 두 개의 패 키 지 를 설치 합 니 다.
Install-Package Autofac
Install-Package Autofac.Extensions.DependencyInection
기본 DI 를appsettings.Development.json
과Microsft.Extensions.DependencyInjection
로 대체 할 수 있 습 니 다.UseServiceProviderFactory()
를 사용 하면 Autofac 를 사용 하여 서 비 스 를 주입 할 수 있 습 니 다.
// static IHostBuilder CreateDefaultHost(string[] args) => new HostBuilder()//...
.ConfigureServices((ctx, services) =>
{
services.AddLogging(x=>{x.AddConsole();});
services.AddAutofac();
})
.ConfigureContainer<ContainerBuilder>(builder =>
{
builder.RegisterType<CustomHostService>()
.As<IHostedService>()
.InstancePerDependency();
})
.UseServiceProviderFactory<ContainerBuilder>(new AutofacServiceProviderFactory())//...
총결산개인 적 으로 제 네 릭 호스트 가 해결 하 는 몇 가지 통 증 이 나타 나 는 것 은 AspNetCore 의 파이프라인 메커니즘 에 비해 콘 솔 프로그램 이 제 네 릭 호스트 에 의존 하지 않 고 디 를 관리 하지 않 으 면 대량의
service.AddAutofac()
가방 을 통합 하 는 것 이 매우 어 려 울 것 이 라 고 생각한다.IHosted Service 를 통 해 서비스의 위탁 관 리 를 편리 하 게 할 수 있 습 니 다.이상 은 Generic-host 를 사용 하 는 방법 에 대한 상세 한 내용 입 니 다.Generic-host 를 사용 하 는 것 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.