ASP.NET 多线程会影响 Structuremap 单例类吗?

2023-12-28

在我的 ASP.NET MVC 项目中,我有一个通过 Structuremap 实例化并配置为单例的类。

鉴于 ASP.NET 本质上是多线程的,并且单例模式默认情况下不是线程安全的,它会导致任何问题吗?

我遇到一个问题,即配置为单例的类返回多个实例。此问题是否是由于从不同线程请求实例所致。

编辑:对此问题给出了更详细的描述。Singleton 中的结构图返回多个实例 https://stackoverflow.com/questions/16732401/structuremap-in-singleton-returning-multiple-instances?noredirect=1#comment24116591_16732401

EDIT2:这是我的班级所做的描述

class DerviedClass: BaseInterface
{
   ISession session

   DerivedClass()
   {
      session = ObjectFactory.GetInstance<ISession>();
   }

   public bool DoWork
   {
       return session.QueryOver<MyTable>().RowCount() > 0;
   }
}

考虑到您的扩展版本,示例DerviedClass: 我想说,这是一个非常危险的事情,可能会导致很多问题。

我的担忧:

1) ASP.NET + NHibernate == ISession per Request。换句话说,当应用程序启动时(最有可能由第一个请求触发,如果自动重新启动,则触发的频率可能会更高),单例被创建并提供了一个实例ISession per 当前请求 i.e 第一次请求.

好吧,至少,ISession应该通过接收Factory无论何时需要,可以肯定的是,它是当前请求有关的。

2) 如果 NHibernateISession在构造函数中创建,旨在独立于当前请求,这可能意味着:

  • 它长时间运行,在更多请求中打开且未关闭 - 可能存在锁定问题。或者
  • 需要一些打开/关闭 ISession 管理,而不是基于当前请求

关键是,我在这里没有看到单例模式的好处。我们不需要也不提供通用的、要求独立的东西。

我们确实返回依赖于请求(及其会话范围)的数据。所以,我建议使用:

.HybridHttpOrThreadLocalScoped()

与逻辑生命周期使用的好处相比,为每个请求创建实例的开销根本不算什么。

但是,是的,这只是我的建议...因为我看到许多潜在的问题(锁定、意外更改、会话中可能提交的脏对象等)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 多线程会影响 Structuremap 单例类吗? 的相关文章

随机推荐

  • IE11间歇性不加载页面

    我们的许多用户报告说 他们在使用 IE11 访问我们的网站时遇到空白页面 有时他们甚至没有得到空白页面 浏览器只是停留在最后访问的页面上 这些用户可以毫无问题地访问其他域 例如 google com 对于出现故障的浏览器 如果这些用户在 I
  • Woocommerce 结账页面内部服务器错误

    我在 woocommerce 的结帐页面中遇到 500 内部服务器错误 虽然订购简单的产品 但它工作正常 但是当与可预订产品一起使用时 预订订单将保存在管理面板中 邮件也会发送 但订单收据不会显示在结帐页面中 在此 wc ajax chec
  • 根据 MA​​TLAB 中的数据值使用标记填充颜色

    我正在使用 matlab 绘制三个数据系列 例如 0 4545 0 7676 10 0 3232 0 5432 20 假设这是一个 100 x 3 矩阵 我们称其为A 也是根据A 1 排序的 第三列是一个附加数字 范围从1到100 我正在使
  • Jacoco:查找外部测试的代码覆盖率

    我最近在 eclipse 中使用 EclEmma 插件来查找应用程序中 JUnit 的代码覆盖率 效果非常好 在下一步中 我希望能够找到从外部调用我们的应用程序的端到端测试 功能测试的代码覆盖率 它们驻留在单独的服务器上 基本上 我们将应用
  • 如何检测HTML5视频是否暂停缓冲?

    我正在尝试测试视频是否断断续续 我注意到pause当视频暂停缓冲时 不会触发事件 检测视频是否已暂停缓冲的最佳方法是什么 我通过检查玩家的进度来做到这一点x毫秒 例如50 如果玩家的进步没有达到预期 那么我们就会进行缓冲 这是相当可靠的 因
  • 在 MySQL 中使用 LIMIT 根据列值限制结果 (PHP/MySQL)

    我多次搜索这个问题的答案 在 SO 和其他地方 但没有找到真正符合我需求的答案 如果有 我提前道歉 我有一个使用 PHP 的查询 它从数据库 WordPress 返回一个数组 基本上我想做的是查看列的值 然后根据该值进行 LIMIT 这是为
  • Python - 成功使用 Cookie

    当我尝试使用 facebook cookie 在 facebook 上打开登录帐户时 import urllib2 urllib cookielib jar cookielib CookieJar cookie urllib2 HTTPCo
  • PHP array_rand 返回唯一键吗?

    如果我打电话array rand array 100 它是否可以避免多次选择相同的键 是的 在one调用的返回集应该是唯一的
  • 将日期组件(整数)转换为字符串

    我的代码采用 NSDate 并读取年 月和日 然后将它们串在一起作为一个整数 接下来我想将这个 Int 转换为 String 以便可以将其插入 URL String 但没有成功 let calendarUnits NSCalendarUni
  • 如何将 CKEditor 集成到 Asp.net MVC 中

    Saw 这个帖子 http www codeproject com KB aspnet fckeditor aspx在 FCKEditor 的 CodeProject 上 有人可以解释一下新版本的情况吗 实际上这很容易做到 首先从官网下载最
  • WebSocket 的 API 网关

    我的 websocket 应用程序需要一个 API 网关 分析并识别来自某些IP的异常请求 配额和速率限制 统计数据 免费或商业 性能稳定 我的WebSocket的子协议是WAMP 所以恐怕没有现有的产品可以完成这项工作 我打算开发一个并假
  • 使用 JavaScriptSerializer.DeserializeObject 如何取回使用不区分大小写的字符串比较器的字典?

    我有一些需要反序列化的 JSON 所以我使用 JavaScriptSerializer DeserializeObject 如下所示 var jsonObject serializer DeserializeObject line as D
  • 在 netbeans 中为 Maven 项目设置自定义运行时类路径

    当我从 netbeans 中运行 Maven 项目时 我想添加自定义类路径 到目前为止 我已经尝试将以下内容添加到运行项目项目属性中的操作 exec args classpath classpath c QUASR duplicateRem
  • EF Core 3.0 中的存储过程

    如何在 EF Core 3 0 中使用存储过程 我尝试过以下方法 var user await context Query
  • Linux 上的原子文件创建?

    如果文件不存在 我需要创建一个文件 这样尝试创建该文件的另一个进程就会失败 我需要甚至在创建过程完成向其中写入实际数据之前就将文件视为 已创建 我读到O EXCL标记为open 看来解决方案是存在的 但是我有几个问题 你有这种技术的经验吗
  • 更改 R Markdown 投影仪演示文稿中的背景

    我正在 rmarkdown 中编写投影仪演示文稿 并且我有两种类型的框架 它们的背景应该有所不同 所以我在乳胶中写了两个类似的函数 newcommand settitlestyle setbeamertemplate background
  • 错误:yaml.scanner.ScannerError:扫描简单密钥时

    我收到以下错误docker compose docker compose up d ERROR yaml scanner ScannerError while scanning a simple key in docker compose
  • OpenJDK 9 IntelliJ IDEA (Ubuntu)“无法解析符号”

    我最近在 Ubuntu 17 10 下安装了 openJDK 9 似乎 IntelliJ IDEA 遇到了问题 每当我创建一个新项目时 IntelliJ 都可以找到 JDK 但它似乎没有以正确的方式配置它 这是它的样子 当我创建 Hello
  • Go 中 int 类型的最大值

    如何指定可表示的最大值unsigned整数类型 我想知道如何初始化min在下面的循环中 迭代计算某些结构的最小和最大长度 var minLen uint var maxLen uint 0 for thing range sliceOfTh
  • ASP.NET 多线程会影响 Structuremap 单例类吗?

    在我的 ASP NET MVC 项目中 我有一个通过 Structuremap 实例化并配置为单例的类 鉴于 ASP NET 本质上是多线程的 并且单例模式默认情况下不是线程安全的 它会导致任何问题吗 我遇到一个问题 即配置为单例的类返回多