如何在标准类库中读取 .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 配置?的主要内容,如果未能解决你的问题,请参考以下文章

.net core实现读取自定义配置文件

如何在 .NET Core 类库中使用 System.Windows.Forms

ASP.NET Core 类库中取读配置文件 appsettings.json

如何在 .NET Core 类库中引用 Visual Studio 共享项目

.NET Core类库项目中如何读取appsettings.json中的配置

.net core mvc 类库读取配置文件