• 2、ASP.NET Core中服务的生命周期


           ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化。有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到;而还有一些服务,仅仅只用初始化一次,就可以在整个应用程序中使用。

    下面我就讲一讲ASP.NET Core中服务的生命周期。

    Singleton  --单例模式

         只有一个服务的实例被创建,这个实例,存储在内存中,可以在整个应用程序中使用。我们可以对一些初始化代价比较大的服务,使用Singleton模式。在代码中可以这样:

    services.AddSingleton<IProductService, ProductService>();

    Scoped  --作用域

         这种模式下,将会为每一个请求,都创建一个服务的实例。所有同一个请求中的中间件、MVC控制器,等等,都会得到一个相同的服务实例。Entity Framework Context就是一个Scoped服务最好的参考例子。我们可以通过使用AddScoped方法来使用Scoped模式:

    services.AddScoped<IProductService, ProductService>();
    

    Transient  --短暂的、瞬变的  

        Transient模式下,服务每次被请求的时候,都会创建一个服务实例,这种模式特别适合轻量级、无状态的服务。我们可以使用AddTransient方法,来注入服务:

    services.AddTransient<IProductService, ProductService>();

    如果你想将上面我讲到的概念形象化,那么下面的图标就是你快速参考的一个例子。

    对下面图标的解释说明:

    • Singleton:单例模式下的服务,只有一个服务实例,所有的请求,都是共享着一个服务实例;这种模式下,我们需要并发以及多线程的问题;
    • Scoped:为每个请求都创建一个服务的实例,并且在这个请求中,都是可以多次重复使用这个服务实例;每个请求,可以看做一个作用域。request1可以使用服务1的实例,request2可以使用服务2的实例互不干涉;
    • Transient:这种模式下,不管是不是同一个请求,每次都会新建一个新的服务实例;这种是最常见的,并且是安全的选择,如果你担心多线程的问题的话。

    每天学一点,每天积累一天,进步就不止一点点!PS:好记性不如烂笔头,学会总结,学会思考~~~ ----要飞翔,必须靠自己!
  • 相关阅读:
    moment获取天的23时59分59秒可以用moment().endOf(String),以及获取天的0时0分0秒可以用moment().startOf('day')
    vue 去除输入框首位的空格
    管道
    事件广播
    iview在子组件中调用父组件的方法
    ZOJ 3430 Detect the Virus(AC自动机)
    HDU 3065 病毒侵袭持续中(AC自动机)
    HDU 2896 病毒侵袭(AC自动机)
    HDU 2222 Keywords Search(AC自动机)
    shell常用命令
  • 原文地址:https://www.cnblogs.com/caofangsheng/p/14697683.html
Copyright © 2020-2023  润新知