DotNET Console Generic Host - Create Project

2022. 9. 5. 00:00DOTNET/Generic Host

반응형

일반 적인 .net core 관련된 Console app 을 생성하자.

글쓴이는 GenericHost 라는 이름으로 작성하였다. 

 

이제 이 Console app 을 이용하여 Logger 를 활용해 보겠다. 

 

dotnet DI 를 사용하려면 Generic Host 라는  HostBuilder 를 이용해야 한다. 

 

제네릭 호스트는 콘솔 앱과 같은 다른 유형의 .NET 애플리케이션과 함께 사용할 수 있다.

 

Program.cs 를 다음과 같이 수정하자

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHostedService<Worker>();
    })
    .Build();

host.Run();

Host 에서 alt + shift + f10 을 누르자

아래와 같이 Microsoft.Extensions.Hosting 을 설치 하자 (find and install latest version)

services.AddHostedService<Worker>(); 에서  alt + shift + f10 을 누르자

아래를 추가하자

using Microsoft.Extensions.DependencyInjection;

 

ctrl + shift + a 를 통해 class 를 추가 하자 이름은 Worker 라고 짓자

Worker.cs

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public sealed class Worker : IHostedService
{
    private readonly ILogger _logger;

    public Worker(
        ILogger<Worker> logger,
        IHostApplicationLifetime appLifetime)
    {
        _logger = logger;

        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("1. StartAsync has been called.");

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("4. StopAsync has been called.");

        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("2. OnStarted has been called.");
    }

    private void OnStopping()
    {
        _logger.LogInformation("3. OnStopping has been called.");
    }

    private void OnStopped()
    {
        _logger.LogInformation("5. OnStopped has been called.");
    }
}

이제 실행해보자

실행시 위와 같이 출력되면 정상이다.

 

관련영상

https://youtu.be/lqButTY5wbw

 

 

 

반응형