stevenjin 2024-10-21 19:46 采纳率: 98%
浏览 2
已结题

asp.core mvc修改类的变量失败

asp.core mvc 7.0

1.声明了一个全局类GlobalTest
2.在Program里添加了单例:builder.Services.AddSingleTon(GlobalTest);
3.使用时在构造函数中注入
问题:可以获取该变量的值,但修改则没有生效。如:_globalTest.a=1

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-21 19:47
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在 ASP.NET Core MVC 中使用全局类或单例来存储变量并期望对其进行修改而立即生效通常会有一些挑战,尤其是在多线程和Web应用上下文中。以下是关于您描述的问题的一些建议和可能的原因:

    1. 线程安全问题:在一个Web应用中,同一时间可能会有多个请求进行处理。如果你在不正确的位置修改全局变量(例如直接在控制器中),则可能导致数据的不一致性或并发问题。当两个或多个请求同时尝试修改同一个全局变量时,可能会产生意外的结果或竞争条件。

    2. 生命周期问题:即使你使用了单例模式,ASP.NET Core应用的生命周期管理和依赖注入机制仍然可能影响你的全局变量。每次请求来临时,如果依赖注入逻辑过于复杂或者不正确配置,可能会影响到全局变量的状态。此外,如果你在某个特定的生命周期范围内修改了全局变量,但在其他生命周期内访问它可能不会立即看到修改的结果。

    针对您的问题,这里有一些建议的解决步骤:

    • 确保正确的线程安全访问:使用锁或其他同步机制来确保在修改全局变量时只有一个线程可以访问它。这可以通过使用 lock 语句或 Concurrent 类来实现。

    • 重新考虑设计:在Web应用中,通常不建议使用全局变量来存储状态信息。更好的做法是使用服务或数据库来存储状态信息,并通过服务层来管理这些状态的变化。这样可以避免多线程问题和更易于维护代码。

    • 检查依赖注入配置:确保你的单例注册是正确的,并且全局变量的生命周期与你的应用逻辑相匹配。如果你在注册单例时遇到问题,你可能需要重新查看文档或示例以确保正确配置。

    如果您提供更具体的代码示例和场景描述,我可以为您提供更具体的解决方案和建议。同时,考虑是否真的需要全局变量,是否有其他方式(如数据库、缓存或服务)来实现相同的功能,并且更加安全和可维护。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月21日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥60 Matlab联合CRUISE仿真编译dll文件报错
  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId