【发布时间】:2021-09-12 14:43:36
【问题描述】:
阅读this 的帖子后,我可以理解AddTransient、AddScoped 和AddSingleton 之间的区别,但是我无法看到它们各自的实际用法。
我的理解是
添加瞬态
每次客户端请求时创建一个新实例。
services.AddTransient<IDataAccess, DataAccess>();
每次客户端代码请求时都会返回一个新的 DataAccess 对象。更有可能是构造函数。
AddTransient 的使用
如果我们必须访问数据库以读取和更新它并销毁访问对象 (DataAccess),最好使用 AddTransient - 不确定线程安全性。
AddScoped
为每个 http web 请求创建一个新实例。
AddScoped 的使用
services.AddScoped<ShoppingCart>(serviceProvider => ShoppingCart.GetShoppingCart(serviceProvider));
这意味着每个网络请求都将拥有自己的购物车实例,实习生意味着每个用户/客户端都将拥有自己的购物车实例用于该 http 网络请求。
添加单例
为所有 http web 请求创建单个实例。
AddSingleton 的使用
在示例应用程序中找到了这段代码,但我不明白它有什么用处。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
谁能给出一个合适的实际例子,何时使用 AddSingleton 并检查我对 AddTransient 和 AddScoped 的理解是否正确?
【问题讨论】:
标签: c# asp.net-core