You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

typeof(MyType).GetHashCode()结果不一致致依赖注入故障原因咨询

动态加载程序集导致DI依赖解析失败问题

场景概述

我在构建模块化应用时遇到了依赖注入(DependencyInjection)失效的问题,核心与频繁动态加载程序集有关:应用通过控制台加载入口程序集,部分程序集提供独立线程运行的服务;入口程序集还会动态加载其他程序集以提供ASP.NET Minimal API端点,且这些API程序集自身还会从其他程序集加载额外服务。

核心问题

  • 我通过services.AddSingleton<IKDFService, KDFService>()向服务集合添加了单例服务,但ASP.NET端点无法解析该服务——尽管该服务确实存在于ServiceProvider中。
  • 问题根源在于ServiceProvider内部使用ServiceIdentifier作为字典的键,而ServiceIdentifier的相等性判断依赖待解析类型的GetHashCode()实现。但同一类型的GetHashCode()返回值,在添加服务到ServiceCollection时和后续解析时不一致。

已尝试的操作与环境

  • 解决方案包含约15个项目,结构复杂。
  • 尝试过多种程序集加载方式:Assembly.Load()、Assembly.LoadFile()、AssemblyLoadContext.Default.LoadFromAssemblyPath()等。
  • 启动ASP.NET前后,AppDomain.CurrentDomain.GetAssemblies()均显示可疑程序集仅存在一次。
  • 使用.NET 8 RC1版本。

疑问

希望了解:在同一应用运行期间,同一类型从不同程序集调用typeof(MyType).GetHashCode()会产生不同结果的可能情况。


内容的提问来源于stack exchange,提问作者grasbueschel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:17:11