gpt4 book ai didi

c# - 有没有办法在 ConfigureServices() 中访问强类型设置?

转载 作者:行者123 更新时间:2023-12-01 12:22:20 24 4
gpt4 key购买 nike

我在 Startup.cs 中有类似的代码

services.Configure<AppSettings>(
Configuration.GetSection("AppSettings"));

services.AddScoped<IMyService, MyService>();
services.AddScoped((_) => MyFactory.Create(
Configuration["AppSettings:Setting1"],
Configuration["AppSettings:Setting2"],
Configuration["AppSettings:Setting3"]));

我想将 AppSettings 的一个实例传递给 MyFactory.Create()。有这样的实例吗?有没有办法获取它的实例?

我想消除我当前代码中的冗余,并利用我的 AppSettings 类的一些好处(例如,它有一些默认值和一些方便的只读属性,它们是其他属性的函数)。

它可能看起来像这样:
services.Configure<AppSettings>(
Configuration.GetSection("AppSettings"));

var appSettings = ???;
services.AddScoped<IMyService, MyService>();
services.AddScoped((_) => MyFactory.Create(appSettings));

什么代替“???”?

最佳答案

您可以使用 Microsoft.Extensions.Configuration.Binder包这个。这提供了一个 Bind IConfigurationSection 上的扩展方法接口(interface)并允许您传入选项类的实例。它将尝试以递归方式将配置值绑定(bind)到您的类属性。

引用文档:

Attempts to bind the given object instance to configuration values by matching property names against configuration keys recursively.



在您的情况下,代码如下所示:
// Create a new, empty instance of AppSettings
var appSettings = new AppSettings();

// Bind values from the 'AppSettings' section to the instance
Configuration.GetSection("AppSettings").Bind(appSettings);

请记住,如果您还想注入(inject) IOptions<AppSettings>通过依赖注入(inject)在您的应用程序中,您仍然需要通过以下方式配置选项
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

关于c# - 有没有办法在 ConfigureServices() 中访问强类型设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com