如何使用.NET Core 选项模式【Options】

2020-07-01 13:00 来源:易采站长站 作者:王冬梅 点击: 评论:

A-A+

原标题:如何使用.NET Core 选项模式【Options】

ASP.NET Core引入了Options模式,使用类来表示相关的设置组。简单的来说,就是用强类型的类来表达配置项,这带来了很多好处。利用了系统的依赖注入,并且还可以利用配置系统。它使我们可以采用依赖注入的方法直接使用绑定的一个POCO对象,这个POCO对象就叫做Options对象。也可以叫做配置对象。

以下大多内容来自官方文档,我只是个翻译官或者叫搬运工吧!

引入Options扩展包

PM>Package-install Microsoft.Extensions.Options

绑定分层配置

在appsetting.json文件增加如下配置

"Position": {
  "Title": "Editor",
  "Name": "Joe Smith"
 }

创建以下 PositionOptions 类:

public class PositionOptions
{
  public const string Position = "Position";

  public string Title { get; set; }
  public string Name { get; set; }
}

选项类:

必须是包含公共无参数构造函数的非抽象类。 类型的所有公共读写属性都已绑定。 不会绑定字段。 在上面的代码中,Position 未绑定。 由于使用了 Position 属性,因此在将类绑定到配置提供程序时,不需要在应用中对字符串 "Position" 进行硬编码。

类绑定

调用 ConfigurationBinder.Bind 将 PositionOptions 类绑定到 Position 部分。然后就可以用了,当然这种方式在开发.NET Core种并不常用,一般采用依赖注入的方式注入。

var positionOptions = new PositionOptions();
Configuration.GetSection(PositionOptions.Position).Bind(positionOptions);

使用 ConfigurationBinder.Get 可能比使用 ConfigurationBinder.Bind 更方便。

positionOptions = Configuration.GetSection(PositionOptions.Position).Get<PositionOptions>();

依赖项注入服务容器

修改ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<PositionOptions>(Configuration.GetSection(
                    PositionOptions.Position));
  services.AddRazorPages();
}

通过使用前面的代码,以下代码将读取位置选项:

public class Test2Model : PageModel
{
  private readonly PositionOptions _options;

  public Test2Model(IOptions<PositionOptions> options)
  {
    _options = options.Value;
  }

  public ContentResult OnGet()
  {
    return Content($"Title: {_options.Title} \n" +
            $"Name: {_options.Name}");
  }
}

选项接口
初学者会发现这个框架有3个主要的面向消费者的接口:IOptions、IOptionsMonitor以及IOptionsSnapshot。

这三个接口初看起来很类似,所以很容易引起困惑,什么场景下该用哪个接口呢?

1.IOptions

不支持

(1)在应用启动后读取配置数据。

(2)命名选项

【易采站长站编辑:秋军】