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

编译时DI容器适配ASP.Net Core:如何编译时确定GetService调用类型

关于ASP.NET Core中编译时收集IServiceProvider.GetService调用类型的问题

我是基于Roslyn源代码生成器的编译时依赖注入(DI)容器MrMeeseeks.DIE的作者。该容器可轻松应用于控制台项目、类库及WPF等UI应用,因为这些项目通常具备可在编译时确定的天然根类型(如Program或App),且完全独立于DI容器(或称“服务提供程序”)。

但ASP.Net Core的情况有所不同,它严重依赖IServiceProvider接口及其唯一方法:

public object? GetService (Type serviceType);

对于编译时DI容器而言,问题在于该方法依赖的Type参数实际上只能在运行时确定,而运行时晚于编译时,容器无法及时做出调整。

我想到的一种可行方案是生成一个基于编译时DI容器的IServiceProvider实现,但要使其生效,必须能在编译时收集到GetService方法可能被调用的所有类型。简言之:给定任意ASP.Net Core应用,如何在编译时全面且自动地确定应用运行时可能传入GetService的所有类型?

目前我能想到的部分类型包括:

  • 派生自ControllerBase的类型
  • 标记有FromServicesAttribute的参数及属性的类型

由于我对ASP.Net Core经验有限,无法确定完整的类型列表,特此寻求帮助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:16