public class Bar
{
    public static readonly string Foo = ConfigurationManager.AppSettings["Foo"];
}

在教室里.NET框架4.x、 我可以用ConfigurationManager.AppSettings ["Foo"]得到Webconfig中的Foo,然后我可以很容易地得到FooBar.Foo的值

但是在.Net内核,我必须注入options,不能得到FooBar.Foo的值

有没有一种方法,可以直接通过Bar.Foo得到Foo的值?

推荐答案

因此,实际上有两种方法可以做到这一点.

选项1:选项类

你有一个应用程序设置.json文件:

{
  "myConfiguration": {
    "myProperty": true 
  }
}

您可以按如下方式创建配置POCO:

public class MyConfiguration
{
    public bool MyProperty { get; set; }
}

在你的创业公司.cs您的ConfigureServices中有注册配置的内容:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}

然后在控制器/服务中注入IOptions,它就可以使用了.

public class ValuesController : Controller
{
    private readonly MyConfiguration _myConfiguration;

    public ValuesController(IOptions<MyConfiguration> myConfiguration)
    {
        _myConfiguration = myConfiguration.Value;
    }
}

就我个人而言,我不喜欢使用IOptions,因为我认为它会拖拽一些我并不真正想要的额外垃圾,但你可以做一些很酷的事情,比如热交换之类的.

选项2:配置POCO

这基本上是相同的,但是在您的configure Services方法中,您将绑定到POCO的一个单例.

public void ConfigureServices(IServiceCollection services)
{
    //services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
    services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}

然后你可以直接注射POCO:

public class ValuesController : Controller
{
    private readonly MyConfiguration _myConfiguration;

    public ValuesController(MyConfiguration myConfiguration)
    {
        _myConfiguration = myConfiguration;
    }
}

有点简单,因为你可能应该使用一个接口来简化单元测试,但是你明白了.

大部分来自这里:http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/

.net相关问答推荐

为什么Linq中的运算符逻辑不匹配结果,当值为0或在VB. NET中没有

ZstdNet库的问题:Src大小不正确,异常

AutoMapper在实体框架查询后不知从哪里带来数据

在`MAUI`应用中使用Android`MediaPlayer`的`prepare`方法只在发布模式下和在物理设备上崩溃

在本地运行 Azure 函数会在 .NET7 升级后出现无运行时错误

线程安全性的单元测试?

为什么 StyleCop 建议在方法或属性调用前加上this?

log4net 与 TraceSource

Int32.ToString() 是特定于文化的吗?

mstest.exe 在哪里?

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

重新启动(回收)应用程序池

将双精度转换为带有 N 个小数的字符串,点作为小数分隔符,并且没有千位分隔符

如何正确停止BackgroundWorker

Java 和 .NET 技术/框架的类似物

String.Split 仅在 C# 中的第一个分隔符上?

从 List 到数组 T[] 的转换

如何在可取消的异步/等待中处理 TransactionScope?

DataGridView 在我的两个屏幕之一上的可怕重绘性能

实体框架太慢了.我有哪些 Select ?