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

Hal*_*ard 2 .net-core asp.net-core-webapi

今天(2016 年 11 月 11 日)我下载了新的 Visual Studio 2017 RC,安装了 .Net Core 1.1 并设置了一个 Web Api 项目(ASP.NET Core Web 应用程序(.NET Core))。然后我按照有关如何从配置文件读取应用程序设置的说明进行操作。这工作得很好。

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

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

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

这是我在类库中的类:

public class Firebase : IDatabase
{
    public Firebase(IOptions<AppSettings> appSettings)
    {
        //string basePath = 
    }
}  
Run Code Online (Sandbox Code Playgroud)

下面是 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));
    }  
Run Code Online (Sandbox Code Playgroud)

我试着添加

using Microsoft.Extensions.Options;  
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*Put 7

IOptions{T}在 .NET Core 中使用是正确的方法。Visual Studio 2017 表明有不必要的使用。这有点令人困惑,因为当指针位于Microsoft.Extensions.Optionsusing上时,Visual Studio 会指示这一点。看看 Visual Studio 提出的建议,它没有删除Microsoft.Extensions.Optionsusing 而是 eq `System.

  • 感谢您的回答!它让我检查可能丢失的参考资料。结果我引用了 *Microsoft.Extensions.Configuration (1.1.0)*,而不是 *Microsoft.Extensions.Options.ConfigurationExtensions (1.1.0)*。在再次重启 VS 2017 之后,这终于奏效了! (3认同)