내장 IoC 컨테이너는 등록된 서비스 유형의 수명을 관리합니다. 지정된 수명을 기준으로 서비스 인스턴스를 자동으로 폐기합니다.
내장 IoC 컨테이너는 세 가지 수명을 지원합니다. -
싱글톤 − IoC 컨테이너는 애플리케이션 수명 동안 단일 서비스 인스턴스를 생성하고 공유합니다.
일시적 − IoC 컨테이너는 요청할 때마다 지정된 서비스 유형의 새 인스턴스를 생성합니다.
범위 − IoC 컨테이너는 요청당 한 번 지정된 서비스 유형의 인스턴스를 생성하고 단일 요청에서 공유됩니다.
예시
public interface ILog{
void info(string str);
}
class MyConsoleLogger : ILog{
public void info(string str){
Console.WriteLine(str);
}
} public class Startup{
public void ConfigureServices(IServiceCollection services){
services.Add(new ServiceDescriptor(typeof(ILog), new
MyConsoleLogger())); // singleton
services.Add(new ServiceDescriptor(typeof(ILog),
typeof(MyConsoleLogger), ServiceLifetime.Transient)); // Transient
services.Add(new ServiceDescriptor(typeof(ILog),
typeof(MyConsoleLogger), ServiceLifetime.Scoped)); // Scoped
}
} 다음은 extension 메소드를 이용하여 타입(서비스)을 등록하는 방법을 보여주는 예시입니다.
public class Startup{
public void ConfigureServices(IServiceCollection services){
services.AddSingleton<ILog, MyConsoleLogger>();
services.AddSingleton(typeof(ILog), typeof(MyConsoleLogger));
services.AddTransient<ILog, MyConsoleLogger>();
services.AddTransient(typeof(ILog), typeof(MyConsoleLogger));
services.AddScoped<ILog, MyConsoleLogger>();
services.AddScoped(typeof(ILog), typeof(MyConsoleLogger));
}
}