zoukankan      html  css  js  c++  java
  • ASP.NET Core 2.2在中间件内使用有作用域的服务

    服务生存期

    为每个注册的服务选择适当的生存期。可以使用以下生存期配置ASP.NET Core服务:

    暂时

    暂时生存期服务 (AddTransient) 是每次从服务容器进行请求时创建的。 这种生存期适合轻量级、 无状态的服务。

    范围内

    作用域生存期服务 (AddScoped) 以每个客户端请求(连接)一次的方式创建。

    注意:在中间件内使用有作用域的服务时,请将该服务注入至 Invoke 或 InvokeAsync 方法。 请不要通过构造函数注入进行注入,因为它会强制服务的行为与单一实例类似。

    单例

    单一实例生存期服务 (AddSingleton) 是在第一次请求时(或者在运行 Startup.ConfigureServices 并且使用服务注册指定实例时)创建的。 每个后续请求都使用相同的实例。 如果应用需要单一实例行为,建议允许服务容器管理服务的生存期。 不要实现单一实例设计模式并提供用户代码来管理对象在类中的生存期。

    注意:从单一实例解析有作用域的服务很危险。 当处理后续请求时,它可能会导致服务处于不正确的状态。

    本篇博客主要介绍在中间件内使用有作用域的服务时遇到的错误

    博主在使用JWT实现Token身份认证时自定义了中间件 TokenProviderMiddleware

    在 TokenProviderMiddleware 的构造方法中注入自定义的接口 IUserDAL 之后运行报错:

    提示:无法从根提供程序解析“dal.iuserdal”,因为它需要范围服务“dal.MyDataContext”。

    MyDataContext 为定义的数据库上下文类,默认注入的是作用域生存期服务 (AddScoped)

    解决办法:将接口 IUserDAL 注入 Invoke 方法中即可

    End!

  • 相关阅读:
    Flink开发_Flink中的函数接口
    Netty简介
    java NIO简单了解
    Kafka发送消息流程
    Kafka高性能的原理
    Hbase表设计
    Hbase的读写过程
    Hbase各组件职责
    什么是java的深浅拷贝?
    Flink问题1
  • 原文地址:https://www.cnblogs.com/gygg/p/11383258.html
Copyright © 2011-2022 走看看