如何在Asp。网络核心中使用生命周期选项

  介绍

这篇文章将为大家详细讲解有关如何在Asp。网络核心中使用生命周期选项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>,一,服务的生命周期

在Asp。净核心中,内置容器负责管理服务的生命周期,从被依赖注入容器创建开始,等我们调用完服务时,到容器释放该服务的所有实力为止,有几种形式表现:

1,瞬态:每次请求服务时,都会创建一个新实例,这种生命周期适合用于轻量级服务(如存储库和ApplicationService服务)。

2,范围:为每个HTTP请求创建一个实例,生命周期将横贯整次请求。

3,单例:在第一次请求服务时,为该服务创建一个实例,之后每次请求将会使用第一次创建好的服务。

4,实例:与单例类似,但在应用程序启动时会将该实例注册到容器中,可以理解为比单身还早存在。

应用程序中相关服务的控制生命周期的方法时通过相应的添加*指定,如下三种,当然还可以通过扩展方法来简化ConfigurationServices方法中所见的代码数量。

services.AddTransient ();   services.AddScoped ();   services.AddSingleton ();

<强>二、代码设计服务生命周期

首先设计一些服务相关的操作接口

public  interface  IOperation   ,{   ,Guid  GetGuid ();   ,}      ,public  interface  IOperationTransient: IOperation   ,{      ,}      ,public  interface  IOperationScoped : IOperation   ,{      ,}      ,public  interface  IOperationSingleton : IOperation   ,{   ,   ,}      ,public  interface  IOperationInstance : IOperation   ,{   ,   ,}      基础服务接口

其次对这些操作类予以实现并生成相关服务

///, & lt; summary>   ,///常规服务   ,///& lt;/summary>   ,public  class  Operation : IOperation   ,{   ,private  readonly  Guid  _guid;      ,public 操作()   ,{=,,_guid  Guid.NewGuid ();   ,}      ,public 操作(Guid  guid)   ,{=,,_guid  guid ==, Guid.Empty  ?, Guid.NewGuid (),:, guid;   ,}      ,public  Guid  GetGuid ()   ,{   ,return  _guid;   ,}   ,}      ,///& lt; summary>   ,///瞬时服务   ,///& lt;/summary>   ,public  class  OperationTransient : IOperationTransient   ,{   ,private  readonly  Guid  _guid;      ,public  OperationTransient ()   ,{=,,_guid  Guid.NewGuid ();   ,}      ,public  OperationTransient (Guid  guid)   ,{=,,_guid  guid ==, Guid.Empty  ?, Guid.NewGuid (),:, guid;   ,}      ,public  Guid  GetGuid ()   ,{   ,return  _guid;   ,}   ,}      ,///& lt; summary>   ,///单次请求内服务固定   ,///& lt;/summary>   ,public  class  OperationScoped : IOperationScoped   ,{   ,private  readonly  Guid  _guid;      ,public  OperationScoped ()   ,{=,,_guid  Guid.NewGuid ();   ,}      ,public  OperationScoped (Guid  guid)   ,{=,,_guid  guid ==, Guid.Empty  ?, Guid.NewGuid (),:, guid;   ,}      ,public  Guid  GetGuid ()   ,{   ,return  _guid;   ,}   ,}         ,///& lt; summary>   ,///所有请求内固定服务   ,///& lt;/summary>   ,public  class  OperationSingleton : IOperationSingleton   ,{   ,private  readonly  Guid  _guid;      ,public  OperationSingleton ()   ,{=,,_guid  Guid.NewGuid ();   ,}      ,public  OperationSingleton (Guid  guid)   ,{=,,_guid  guid ==, Guid.Empty  ?, Guid.NewGuid (),:, guid;   ,}      ,public  Guid  GetGuid ()   ,{   ,return  _guid;   ,}   ,}      ,///& lt; summary>   ,///应用程序内固定服务   ,///& lt;/summary>   ,public  class  OperationInstance : IOperationInstance   ,{   ,private  readonly  Guid  _guid;      ,public  OperationInstance ()   ,{=,,_guid  Guid.NewGuid ();   ,}      ,public  OperationInstance (Guid  guid)   ,{=,,_guid  guid ==, Guid.Empty  ?, Guid.NewGuid (),:, guid;   ,}      ,public  Guid  GetGuid ()   ,{   ,return  _guid;   ,}   ,}      基础服务具体实现

如何在Asp。网络核心中使用生命周期选项