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相关问答推荐

Docker失败文件找不到

节省用户在整个应用程序中使用的Flutter

在数据网格中:如何在更改单元格 A 中的值后显示单元格 B 中的更改

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

C# - 获取不包括隐藏文件的文件列表

为什么 Any() 不适用于 c# null 对象

将客户端证书添加到 .NET Core HttpClient

将笔画应用于 WPF 中的文本块

在 Moq Callback() 调用中设置变量值

struct 中需要覆盖什么以确保平等正常运行?

多个等待与 Task.WaitAll - 等效?

我应该在 LINQ 查询中使用两个where子句还是&&?

什么是 C# 中的自动属性,它们的用途是什么?

文件按文件名模式存在

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

判断任意字符串是否为有效文件名的最简单方法

如何卸载Microsoft .NET Core 1.0.0 RC2 - VS 2015 Tooling Preview 1?

泛型类的静态成员是否与特定实例相关联?