标签:注入 transient res span 介绍 使用 技术 设计 服务注册
为每个注册的服务选择适当的生存期。可以使用以下生存期配置ASP.NET Core服务:
暂时生存期服务 (AddTransient) 是每次从服务容器进行请求时创建的。 这种生存期适合轻量级、 无状态的服务。
作用域生存期服务 (AddScoped) 以每个客户端请求(连接)一次的方式创建。
注意:在中间件内使用有作用域的服务时,请将该服务注入至 Invoke
或 InvokeAsync
方法。 请不要通过构造函数注入进行注入,因为它会强制服务的行为与单一实例类似。
单一实例生存期服务 (AddSingleton) 是在第一次请求时(或者在运行 Startup.ConfigureServices
并且使用服务注册指定实例时)创建的。 每个后续请求都使用相同的实例。 如果应用需要单一实例行为,建议允许服务容器管理服务的生存期。 不要实现单一实例设计模式并提供用户代码来管理对象在类中的生存期。
注意:从单一实例解析有作用域的服务很危险。 当处理后续请求时,它可能会导致服务处于不正确的状态。
博主在使用JWT实现Token身份认证时自定义了中间件 TokenProviderMiddleware
在 TokenProviderMiddleware 的构造方法中注入自定义的接口 IUserDAL 之后运行报错:
提示:无法从根提供程序解析“dal.iuserdal”,因为它需要范围服务“dal.MyDataContext”。
MyDataContext 为定义的数据库上下文类,默认注入的是作用域生存期服务 (AddScoped)
解决办法:将接口 IUserDAL 注入 Invoke 方法中即可
End!
标签:注入 transient res span 介绍 使用 技术 设计 服务注册
原文地址:https://www.cnblogs.com/gygg/p/11383258.html