C# [FromServices]用法与依赖注入构造参数来源问题咨询
核心原因:ASP.NET Core 自带依赖注入容器的自动依赖解析逻辑
你提到的三个构造函数参数,都是ASP.NET Core框架默认注册或者项目中已经完成注册的服务,DI容器在创建LocalFileStorageHandler实例时,会自动从全局服务集合中匹配并注入对应的参数实例,不需要手动显式传递。
三个参数的具体来源说明:
IConfiguration
是ASP.NET Core启动时默认注册的单例服务,自动绑定了appsettings.json、环境变量、启动参数等所有配置源,无需手动注册即可直接在任意构造函数中注入使用。ILogger<LocalFileStorageHandler>
官方默认WebAPI模板会自动注册日志组件,AddLogging()方法会提前注册泛型ILogger<>的工厂实现,当构造函数传入指定类型的ILogger<T>时,容器会自动生成对应类别的日志实例,不需要单独为每个T注册ILogger<T>。DbContext
项目中必然已经通过AddDbContext方法完成了注册,你可以搜索Startup.cs/Program.cs中类似services.AddDbContext<自定义DbContext子类>(options=>{...})的代码。只要项目只注册了一个EF Core上下文,DI容器就可以直接匹配到构造函数中的基类DbContext参数。
补充验证方式
你可以在ConfigureServices方法的末尾添加以下代码,遍历输出所有已注册的服务,即可找到三个参数对应的注册记录:
foreach (var service in services) { Console.WriteLine($"服务类型:{service.ServiceType.FullName},生命周期:{service.Lifetime},实现类:{service.ImplementationType?.FullName}"); }
内容的提问来源于stack exchange,提问作者Mr.Gomer
相关产品推荐
相关产品推荐

