내장 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)); } }