정상적인 상황이라면 Singleton 에서는 Scoped lifetime을 가진 서비스를 생성할 수 없을테고, 이런때에는 아래와 같은 메세지가 발생합니다.
InvalidOperationException: Cannot resolve scoped service 'xxx' from root provider.
하지만 어떤때에는 이렇게 에러가 발생해서 유닛테스트나 기타 테스트에서 바로 잡히지만
어떤때에는 아무런 문제없이 코드가 돌아가서 유닛테스트를 통과했지만 실제로 서비스를 띄울 때에 exception이 발생하기도 합니다.
아래는 같은 상황에 대한 예제코드인데요,
A = Scoped,
B = Singleton 상태입니다.
아래 코드를 실행해보면 저는 문제없이 동작합니다.
저는 Scoped 로 inject 된 서비스를 singleton에서 호출하려고 할 때 일관되게 exception이 발생하길 바랍니다. 혹시 관련된 내용에 대해 아는분 계신가요?
using Microsoft.Extensions.DependencyInjection;
ServiceCollection services = new ServiceCollection();
services.AddScoped<A>();
services.AddSingleton<B>();
var provider = services.BuildServiceProvider();
var bb1 = provider.CreateScope().ServiceProvider.GetRequiredService<B>();
var bb2 = provider.GetRequiredService<B>();
public class A // Scoped
{
}
public class B // Singleton
{
public B(A a)
{
A = a;
}
public A A { get; }
}