its_jh_stroy

[C#] WorkerService 작업자 서비스 프로젝트에서 의존성 추가하기 본문

C#

[C#] WorkerService 작업자 서비스 프로젝트에서 의존성 추가하기

_J_H_ 2023. 12. 13. 22:50

작업자 서비스 프로젝트에서는 Program.cs 파일을 통해 의존성을 주입할 수 있다.

Program.cs 파일은 기본적으로 아래와 같은 형태로 되어있다.

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

await host.RunAsync();

 

ConfigureServices에 들어가는 Action 메서드를 수정하여 의존성을 주입할 수 있다.

주입할 의존성 타입 생성자에 파라미터가 필요 없는 경우도 있지만 필요한 경우도 있다.

각 경우에 따라 필요한 소스이다.

 

생성자 파라미터가 필요 없는 경우

//Program.cs
IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();

        // MyClass 타입 인스턴스 주입
	// 생성자 파라미터가 없는 경우
        services.AddSingleton<MyClass>();
    })
    .Build();

await host.RunAsync();

 

 

생성자 파라미터가 필요한 경우

//Program.cs
IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();

        // MyClass 타입 인스턴스 주입
	// 생성자 파라미터가 있는 경우
        services.AddSingleton<MyClass>
        (
            serviceProvider =>
            new MyClass
            (
                "AA",
                "BB",
                30
            )
        );
    })
    .Build();

await host.RunAsync();

 

위와 같이 코드를 작성했다면 다음으로 실행되는 Worker 클래스 생성자를 수정한다.

public class Worker : BackgroundService
{
	private readonly ILogger<Worker> _logger;

	// MyClass 파라미터 추가
	public Worker(ILogger<Worker> logger, MyClass myClass)
	{
		_logger = logger;
	}

	// ...
}

위 작업이 끝나면 특정 인스턴스를 주입하여 프로그램을 실행할 수 있게 된다.