zoukankan      html  css  js  c++  java
  • 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:好记性不如烂笔头,学会总结,学会思考~~~ ----要飞翔,必须靠自己!
  • 相关阅读:
    杭电 1596 find the safest road (最短路)
    回溯法——求解N皇后问题
    iptables apache2
    POJ 2586 Y2K Accounting Bug(枚举大水题)
    JAVA学习第十九课(java程序的异常处理 (二))
    XHTML中button加入超链接以及使插入图片与屏幕一样大
    每天一个JavaScript实例-apply和call的使用方法
    【HDU 5384】Danganronpa(AC自己主动机)
    小心APP应用让你成为“透明人”
    第一讲:使用html5——canvas绘制奥运五环
  • 原文地址:https://www.cnblogs.com/caofangsheng/p/14697683.html
Copyright © 2011-2022 走看看