如何为作为依赖项C#Asp.net Core添加的注册服务指定服务寿命?
内置的IoC容器管理已注册服务类型的生命周期。它根据指定的生存期自动处理服务实例。
内置的IoC容器支持三种寿命-
Singleton-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 } }
以下示例显示了使用扩展方法注册类型(服务)的方法。
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)); } }