dependency injection 을 할 때 인터페이스의 구현이 달라서 특정 구현을 해결해야 하는 경우가 종종 있습니다.
이제 ASP.NET Core 8.0에서 Keyed Services 를 지원합니다.
다음 인터페이스와 그 구현을 고려해 보세요.
public interface IMyService
{
string GetValue();
}
public class MyService1 : IMyService
{
public string GetValue() => "MyService1";
}
public class MyService2 : IMyService
{
public string GetValue() => "MyService2";
}
다른 lifetimes (Transient, Singleton) 에도 Keyed services 를 등록할 수 있습니다.
이제 [FromKeyedServices] 속성을 사용하여 키별로 특정 구현을 확인할 수 있습니다.
생성자에서 구현하는 방법은 아래와 같습니다.
// Note:
// I am using Primary Constructor which is new with .NET 8.0
// You can use the other constructor as well
public class MyClass([FromKeyedServices("service1")] IMyService myService)
{
public string GetValue() => myService.GetValue();
}