ASP.NET Core 3.1如何在ConfigureServices中复用Configure注册的AppSettings注册服务
可行实现方案
方案1:调整自定义类构造函数(推荐,符合依赖注入最佳实践)
这种方案不需要手动读取配置,框架会自动完成依赖注入,代码最简洁:
- 修改
MyCustomClass的构造函数,直接注入IOptions<AppSettings>即可获取配置:
public class MyCustomClass : IMyCustomClasses { public MyCustomClass(IOptions<AppSettings> appOptions) { // 直接从配置实例中取你需要的参数 var targetValue = appOptions.Value.Somevalue; // 后续初始化逻辑 } }
- 调整
ConfigureServices中的服务注册代码,删除手动读配置的行即可:
services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); // 直接注册服务,框架会自动注入构造函数需要的IOptions<AppSettings> services.AddSingleton<IMyCustomClasses, MyCustomClass>();
方案2:使用服务注册的工厂重载(适合无法修改自定义类源码的场景)
如果你不能修改MyCustomClass的构造函数,可以用服务注册的工厂重载,从已经构建的服务容器中解析配置:
services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); // 用带IServiceProvider参数的工厂方法注册服务 services.AddSingleton<IMyCustomClasses>(serviceProvider => { var appConfig = serviceProvider.GetRequiredService<IOptions<AppSettings>>().Value; return new MyCustomClass(appConfig.Somevalue); });
内容的提问来源于stack exchange,提问作者user20358
相关产品推荐
相关产品推荐

