如何在标准类库中读取 .Net Core 配置?

Posted

技术标签:

【中文标题】如何在标准类库中读取 .Net Core 配置?【英文标题】:How do I read .Net Core configuration in a standard class library? 【发布时间】:2017-04-04 22:52:02 【问题描述】:

今天(2016 年 11 月 11 日)我下载了新的 Visual Studio 2017 RC,安装了 .Net Core 1.1 并设置了一个 Web Api 项目(ASP.NET Core Web 应用程序(.NET Core)) .然后我按照how to read app settings from a config file 上的说明进行操作。这工作得很好。

然后我在同一个解决方案中创建了一个新项目。这是 .NET Core 部分下的 类库 (.NET Standard)。我添加了一个带有接口的类,并使用默认依赖注入进行了设置。

最后,我尝试通过构造函数注入来使用类库中的配置。我收到此错误消息:

找不到类型或命名空间名称“IOptions”

这是我在类库中的类:

public class Firebase : IDatabase

    public Firebase(IOptions<AppSettings> appSettings)
    
        //string basePath = 
    
  

这是 Startup.cs 中的 ConfigureServices 方法:

public void ConfigureServices(IServiceCollection services)
    
        // Add framework services.
        services.AddMvc();
        services.AddTransient<IDatabase, Firebase>();

        // Set up configuration files.
        services.AddOptions();
        services.Configure<AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options));
      

我尝试添加

using Microsoft.Extensions.Options;  

让它编译,但灯泡告诉我这是一个不必要的参考。

我错过了什么?这不可能吗? .NET Core 有特殊的类库吗?

【问题讨论】:

【参考方案1】:

使用IOptionsT 是.NET Core 中的正确方法。 Visual Studio 2017 表明存在不必要的使用。这有点令人困惑,因为当指针位于 Microsoft.Extensions.Options 上时,Visual Studio 会指出这一点。查看 Visual Studio 提出的建议,它不会删除 Microsoft.Extensions.Options 使用但其他使用 e.q. `系统。

【讨论】:

感谢您的回答!它让我检查可能缺少的参考资料。原来我引用了 Microsoft.Extensions.Configuration (1.1.0),但没有引用 Microsoft.Extensions.Options.ConfigurationExtensions (1.1.0)。在再次重新启动 VS 2017 之后,这终于奏效了!

以上是关于如何在标准类库中读取 .Net Core 配置?的主要内容,如果未能解决你的问题,请参考以下文章