Built-in IoC container manages the lifetime of a registered service type. It automatically disposes a service instance based on the specified lifetime.
The built-in IoC container supports three kinds of lifetimes −
Singleton − IoC container will create and share a single instance of a service throughout the application's lifetime.
Transient − The IoC container will create a new instance of the specified service type every time you ask for it.
Scoped − IoC container will create an instance of the specified service type once per request and will be shared in a single request.
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 } }
The following example shows the ways of registering types (service) using extension methods.
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)); } }