如何为作为依赖项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));
}
}