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
相关产品推荐
相关产品推荐

