gpt4 book ai didi

c# - 在嵌套类中使用配置设置

转载 作者:行者123 更新时间:2023-11-30 16:38:44 24 4
gpt4 key购买 nike

当我有嵌套类时,子类需要一些配置设置(即在 appsettings.json 中编写的设置),我是否需要创建一个存储桶中继来将配置传递给子类?

我不认为下面的例子是一个聪明的方法。有没有更好的做法?

Startup.cs

public Startup(IConfiguration configuration, ...)
{
...
this.Configuration = configuration;
...
}

Parent.cs

public class Parent
{
public Parent(IConfiguration configuration)
{
_configuration = configuration;
}

private IConfiguration _configuration;
private ChildOne _childOne;
private ChildTwo _childTwo;

public void InitializeChildren()
{
_childOne = new ChildOne(_configuration);
_childTwo = new ChildTwo(_configuration);
}
}

ChildOne.cs

public class ChildOne{
public ChildOne(IConfiguration configuration){
_propOne = configuration.GetSection("brahbrah").Value;
}

private string _propOne;
}

最佳答案

领域对象/模型只不过是数据容器。这些数据容器可能需要数据,但不应(直接)依赖于此数据的依赖注入(inject),因为它们是应用程序的核心。模型(或其依赖项)的更改很可能会导致更大的更改。

如您在示例中所示,您希望使用 new 实例化您的模型运算符并将 IConfiguration 作为参数传递。通过在数据容器中要求 IConfiguration,您创建了一种情况,在这种情况下,您的模型将需要大量检查返回的结果是否存在以及其中的每个属性是否存在,然后在数据容器中设置适当的值。

解决这个问题的更好方法是在依赖注入(inject)框架中注册一个专用的配置类,我们将调用它 BrahBrahConfig 来匹配您的示例。

public static IServiceCollection SetupDependencyInjection(this 
IServiceCollection services, IConfiguration config)
{
services.Configure<BrahBrahConfig>(config.GetSection("brahbrah"));

return services;
}

在上面的示例中,您看到了对 IServiceCollection Configure<TOptions>(this IServiceCollection services, IConfiguration config) 的重载使用可以在 nuget 包“Microsoft.Extensions.Options.ConfigurationExtensions”中找到。

此重载使您能够直接将 IOptions 的实例注入(inject)到您选择的构造函数中。

private BrahBrahConfig _config;

public Parent(IOptions<BrahBrahConfig> config)
{
_config = config?.Value ?? throw new ArgumentNullException(nameof(config));
}

因此,在您的 startup.cs 中注册后,您可以在 Parent 构造函数中使用 IOptions 作为参数,并使用这些设置在您的模型中设置适当的属性。

关于c# - 在嵌套类中使用配置设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54572135/

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