iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET Core中的Options选项模式怎么配置
  • 100
分享到

ASP.NET Core中的Options选项模式怎么配置

2023-06-29 21:06:18 100人浏览 八月长安
摘要

这篇文章主要介绍“asp.net Core中的Options选项模式怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.net Core中的Options选项模式怎么配

这篇文章主要介绍“asp.net Core中的Options选项模式怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.net Core中的Options选项模式怎么配置”文章能帮助大家解决问题。

1.前言

选项(Options)模式是对配置(Configuration)的功能的延伸。在12章(ASP.net core中的配置二)Configuration中有介绍过该功能(绑定到实体类、绑定至对象图、将数组绑定至类)而选项模式又有个选项类(TOptions),该选项类作用是指:把选项类中的属性与配置来源中的键关联起来。举个例,假设JSON文件有个Option1键,选项类中也有个叫Option1的属性名,经过选项配置,这样就能把json中的键的值映射到选项类属性值中。也可以理解在项目应用中,把一个json文件序列化到.net类。

2.常规选项配置

选项类必须为包含公共无参数构造函数的非抽象类。在appsettings.json文件中添加option1、option2、subsection的配置:

{  "option1": "value1_from_json",  "option2": -1,  "subsection": {    "suboption1": "subvalue1_from_json",    "suboption2": 200  },  "Logging": {    "LogLevel": {      "Default": "Warning"    }  },  "AllowedHosts": "*"}

新建MyOptions类(Models/MyOptions.cs),以下类MyOptions具有三种属性:Option1和 Option2。设置默认值为可选,但以下示例中的类构造函数设置了Option1的默认值。Option2具有通过直接初始化属性设置的默认值:

public class MyOptions{    public MyOptions()    {        // Set default value.        Option1 = "value1_from_ctor";    }    public string Option1 { get; set; }    public int Option2 { get; set; } = 5;}

而MyOptions类通过Configure添加到服务容器并绑定到配置:

public void ConfigureServices(IServiceCollection services){    // Example #1: General configuration    // ReGISter the Configuration instance which MyOptions binds against.    services.Configure<MyOptions>(Configuration);}

也可以使用自定义ConfigurationBuilder从设置文件加载选项配置时,确认基路径设置正确,添加到服务容器并绑定到配置:

var configBuilder = new ConfigurationBuilder()   .SetBasePath(Directory.GetCurrentDirectory())   .AddJsonFile("appsettings.json", optional: true);var config = configBuilder.Build();services.Configure<MyOptions>(config);

以下页面模型通过IOptionsMonitor<TOptions>使用构造函数依赖关系注入来访问设置 (Pages/Index.cshtml.cs):

public class IndexModel{    public IndexModel(IOptionsMonitor<MyOptions> optionsAccessor)    {        _options = optionsAccessor.CurrentValue;    }    private readonly MyOptions _options;    public void OnGet()    {        // Example #1: Simple options        var option1 = _options.Option1;        var option2 = _options.Option2;        var simpleOptions = $"option1 = {option1}, option2 = {option2}";    }}

在Home/Index控制器Action下调用IndexModel.OnGet方法返回包含选项值的字符串

public HomeController(IOptionsMonitor<MyOptions> optionsAccessor){    _optionsAccessor = optionsAccessor;}private readonly IOptionsMonitor<MyOptions> _optionsAccessor;public IActionResult Index(){    IndexModel indexModel = new IndexModel(_optionsAccessor);    indexModel.OnGet();    return View();}

ASP.NET Core中的Options选项模式怎么配置

3.通过委托配置简单选项

使用委托设置选项值。此示例应用程序使用新建MyOptionsWithDelegateConfig类 (Models/MyOptionsWithDelegateConfig.cs):

public class MyOptionsWithDelegateConfig{    public MyOptionsWithDelegateConfig()    {        // Set default value.        Option1 = "value1_from_ctor";    }    public string Option1 { get; set; }    public int Option2 { get; set; } = 5;}

向服务容器添加IConfigureOptions<TOptions>服务。它通过MyOptionsWithDelegateConfig使用委托来配置绑定:

public void ConfigureServices(IServiceCollection services){    // Example #2: Options bound and configured by a delegate    services.Configure<MyOptionsWithDelegateConfig>(myOptions =>    {        myOptions.Option1 = "value1_configured_by_delegate";        myOptions.Option2 = 500;    });}

以下页面模型通过IOptionsMonitor<TOptions>使用构造函数依赖关系注入来访问设置 (Pages/Index.cshtml.cs):

public class IndexModel{    private readonly MyOptionsWithDelegateConfig _optionsWithDelegateConfig;    public IndexModel(IOptionsMonitor<MyOptionsWithDelegateConfig> optionsAccessorWithDelegateConfig)    {        _optionsWithDelegateConfig = optionsAccessorWithDelegateConfig.CurrentValue;    }    public void OnGet()    {        // Example #2: Options configured by delegate        var delegate_config_option1 = _optionsWithDelegateConfig.Option1;        var delegate_config_option2 = _optionsWithDelegateConfig.Option2;        var simpleOptionsWithDelegateConfig =                $"delegate_option1 = {delegate_config_option1}, " +                $"delegate_option2 = {delegate_config_option2}";    }}

在Home/Index控制器Action下调用IndexModel.OnGet方法返回包含选项值的字符串:

public HomeController(IOptionsMonitor<MyOptionsWithDelegateConfig> optionsAccessorWithDelegateConfig){    _optionsAccessorWithDelegateConfig = optionsAccessorWithDelegateConfig;}private readonly IOptionsMonitor<MyOptionsWithDelegateConfig> _optionsAccessorWithDelegateConfig;public IActionResult Index(){    IndexModel indexModel = new IndexModel(_optionsAccessorWithDelegateConfig);    indexModel.OnGet();    return View();}

ASP.NET Core中的Options选项模式怎么配置

每次调用Configure都会将IConfigureOptions<TOptions>服务添加到服务容器。在前面的示例中,Option1和Option2的值同时在appsettings.json中指定,但Option1和Option2的值被配置的委托替代。当启用多个配置服务时,指定的最后一个配置源优于其他源,由其设置配置值。运行应用程序时,页面模型的OnGet方法返回显示选项类值的字符串。

4.子选项配置

将选项绑定到配置时,选项类型中的每个属性都将绑定到窗体property[:sub-property:]的配置键。例如,MyOptions.Option1属性将绑定到从appsettings.json中的option1属性读取的键Option1。在以下代码中,已向服务容器添加IConfigureOptions<TOptions>服务。它将MySubOptions绑定到appsettings.json文件的subsection部分:

public void ConfigureServices(IServiceCollection services){    // Example #3: Suboptions    // Bind options using a sub-section of the appsettings.json file.    services.Configure<MySubOptions>(Configuration.GetSection("subsection"));}

新建MySubOptions类(Models/MySubOptions.cs)将属性SubOption1和SubOption2定义为保留选项值:

public class MySubOptions{    public MySubOptions()    {        // Set default values.        SubOption1 = "value1_from_ctor";        SubOption2 = 5;    }    public string SubOption1 { get; set; }    public int SubOption2 { get; set; }}

以下页面模型通过IOptionsMonitor<TOptions>使用构造函数依赖关系注入来访问设置(Pages/Index.cshtml.cs):

public class IndexModel{    private readonly MySubOptions _subOptions;    public IndexModel(IOptionsMonitor<MySubOptions> subOptionsAccessor)    {        _subOptions = subOptionsAccessor.CurrentValue;    }    public void OnGet()    {        // Example #3: Suboptions        var subOption1 = _subOptions.SubOption1;        var subOption2 = _subOptions.SubOption2;        var subOptions = $"subOption1 = {subOption1}, subOption2 = {subOption2}";    }}

在Home/Index控制器Action下调用IndexModel.OnGet方法返回包含选项值的字符串:

public HomeController(IOptionsMonitor<MySubOptions> subOptionsAccessor){    _subOptionsAccessor = subOptionsAccessor;}private readonly IOptionsMonitor<MySubOptions> _subOptionsAccessor;public IActionResult Index(){    IndexModel indexModel = new IndexModel(_subOptionsAccessor);    indexModel.OnGet();    return View();}

ASP.NET Core中的Options选项模式怎么配置

5.通过IOptionsSnapshot重新加载配置数据

IOptionsSnapshot针对请求生命周期访问和缓存选项时,每个请求只能计算一次选项。以下示例演示如何在更改appsettings.json(Pages/Index.cshtml.cs)后创建新的 IOptionsSnapshot<TOptions>。在更改appsettings.json文件和重新加载配置之前,针对服务器的多个请求返回appsettings.json文件提供的配置键值。

public class IndexModel{    private readonly MyOptions _snapshotOptions;    public IndexModel(IOptionsSnapshot<MyOptions> snapshotOptionsAccessor)    {        _snapshotOptions = snapshotOptionsAccessor.Value;    }    public void OnGet()    {        // Example #5: Snapshot options        var snapshotOption1 = _snapshotOptions.Option1;        var snapshotOption2 = _snapshotOptions.Option2;        var snapshotOptions = $"snapshot option1 = {snapshotOption1}, " + $"snapshot option2 = {snapshotOption2}";    }}

下面显示从appsettings.json文件加载的初始option1和option2值:

snapshot option1 = value1_from_json, snapshot option2 = -1

将appsettings.json文件中的值更改为value1_from_json UPDATED和200。保存appsettings.json 文件。刷新浏览器,查看更新的选项值:

snapshot option1 = value1_from_json UPDATED, snapshot option2 = 200

6.包含IConfigureNamedOptions的命名选项支持

命名选项支持允许应用程序在命名选项配置之间进行区分。命名选项通过OptionsServiceCollectionExtensions.Configure进行声明,其调用扩展方法ConfigureNamedOptions<TOptions>.Configure:

public void ConfigureServices(IServiceCollection services){    // Example #6: Named options (named_options_1)    // Register the ConfigurationBuilder instance which MyOptions binds against.    // Specify that the options loaded from configuration are named    // "named_options_1".    services.Configure<MyOptions>("named_options_1", Configuration);    // Example #6: Named options (named_options_2)    // Specify that the options loaded from the MyOptions class are named    // "named_options_2".    // Use a delegate to configure option values.    services.Configure<MyOptions>("named_options_2", myOptions =>    {        myOptions.Option1 = "named_options_2_value1_from_action";    });}

通过OnGet(Pages/Index.cshtml.cs)访问命名选项:

public class IndexModel{    private readonly MyOptions _named_options_1;    private readonly MyOptions _named_options_2;    public IndexModel(IOptionsSnapshot<MyOptions> namedOptionsAccessor)    {        _named_options_1 = namedOptionsAccessor.Get("named_options_1");        _named_options_2 = namedOptionsAccessor.Get("named_options_2");    }    public void OnGet()    {        // Example #6: Named options        var named_options_1 =            $"named_options_1: option1 = {_named_options_1.Option1}, " +            $"option2 = {_named_options_1.Option2}";        var named_options_2 =            $"named_options_2: option1 = {_named_options_2.Option1}, " +            $"option2 = {_named_options_2.Option2}";        var namedOptions = $"{named_options_1} {named_options_2}";    }}

在Home/Index控制器Action下调用IndexModel.OnGet方法返回包含选项值的字符串:

public HomeController(IOptionsSnapshot<MyOptions> namedOptionsAccessor){    _namedOptionsAccessor = namedOptionsAccessor;}private readonly IOptionsSnapshot<MyOptions> _namedOptionsAccessor;public IActionResult Index(){    IndexModel indexModel = new IndexModel(_namedOptionsAccessor);    indexModel.OnGet();    return View();}

ASP.NET Core中的Options选项模式怎么配置

使用ConfigureAll方法配置所有选项

使用ConfigureAll方法可以配置所有选项实例。以下代码将针对包含公共值的所有配置实例配置Option1。将以下代码手动添加到Startup.ConfigureServices方法:

services.ConfigureAll<MyOptions>(myOptions =>{    myOptions.Option1 = "ConfigureAll replacement value";});

在Home/Index控制器Action下调用IndexModel.OnGet方法返回包含选项值的字符串:

ASP.NET Core中的Options选项模式怎么配置

关于“ASP.NET Core中的Options选项模式怎么配置”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: ASP.NET Core中的Options选项模式怎么配置

本文链接: https://www.lsjlt.com/news/326508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core中的Options选项模式怎么配置
    这篇文章主要介绍“ASP.NET Core中的Options选项模式怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core中的Options选项模式怎么配...
    99+
    2023-06-29
  • ASP.NETCore中的Options选项模式
    1.前言 选项(Options)模式是对配置(Configuration)的功能的延伸。在12章(ASP.NET Core中的配置二)Configuration中有介绍过该功能(绑定...
    99+
    2024-04-02
  • 解析ASP.NET Core中Options模式的使用及其源码
    目录1、Options模式的用法2、Options模式源码解析3、最佳实践本章将和大家分享ASP.NET Core中Options模式的使用及其源码解析。 在ASP.NET Core...
    99+
    2024-04-02
  • ASP.NET Core中的Configuration怎么配置
    这篇文章主要讲解了“ASP.NET Core中的Configuration怎么配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core中的Configu...
    99+
    2023-06-29
  • .Net Core 中选项Options的具体实现
    目录由代码开始定义一个用户配置选项定义json配置文件:myconfig.json创建ServiceCollection示例代码代码运行结果通过运行代码得到的结论问题配合源码解决疑惑...
    99+
    2024-04-02
  • ASP.NET Core中的环境怎么配置
    这篇文章主要介绍了ASP.NET Core中的环境怎么配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ASP.NET Core中的环境怎么配置文章都会有所收获,下面我们一起来看看吧。1.环...
    99+
    2023-06-29
  • ASP.NET Core中的Configuration配置二
    目录1.内存配置1.1GetValue2.绑定到实体类3.绑定至对象图4.将数组绑定至类5.在Razor Pages页或MVC视图中访问配置相关文章 ASP.NET Core2.2 ...
    99+
    2024-04-02
  • ASP.NET Core中的Configuration配置一
    目录1.前言2.命令行配置3.文件配置3.1 INI配置3.2 JSON配置3.2.1GetSection、GetChildren和Exists3.3 XML配置相关文章 ASP.N...
    99+
    2024-04-02
  • ASP.NET Core中的配置有哪些
    这篇文章主要讲解了“ASP.NET Core中的配置有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core中的配置有哪些”吧!背景AS...
    99+
    2024-04-02
  • Vue中的options选项怎么用
    这篇文章主要介绍了Vue中的options选项怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中的options选项怎么用文章都会有所收获,下面我们一起来看看吧。Vue中的options选项optio...
    99+
    2023-06-29
  • ASP.NET Core中的Configuration如何配置
    这篇文章主要讲解了“ASP.NET Core中的Configuration如何配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core中的Configu...
    99+
    2023-06-29
  • ASP.NET Core中MVC模式怎么实现路由
    这篇“ASP.NET Core中MVC模式怎么实现路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ASP.NET...
    99+
    2023-06-29
  • ASP.NET Core MVC中的模型怎么使用
    本篇内容介绍了“ASP.NET Core MVC中的模型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.模型绑...
    99+
    2023-06-30
  • ASP.NET Core中的SSL证书如何配置
    在ASP.NET Core中配置SSL证书可以通过以下步骤进行: 生成SSL证书:可以使用工具如OpenSSL或者通过一些在线服...
    99+
    2024-05-09
    ASP.NET SSL证书
  • 如何配置ASP.NET中的旧加密模式
    在ASP.NET中,可以通过配置文件来启用旧的加密模式。具体而言,需要修改`machine.config`或应用程序的`Web.co...
    99+
    2023-09-07
    ASP.NET
  • ASP.NET Core通用主机的系统怎么配置
    本篇内容介绍了“ASP.NET Core通用主机的系统怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ASP.NET Cor...
    99+
    2023-07-02
  • Lamar怎么在ASP.Net Core项目中使用
    这篇文章将为大家详细讲解有关Lamar怎么在ASP.Net Core项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要用 Lamar 实现依赖注入要说 .NET 世界最早的依赖...
    99+
    2023-06-13
  • ASP.NET Core怎么配置和管理Web主机
    本篇内容主要讲解“ASP.NET Core怎么配置和管理Web主机”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core怎么配置和管理Web主机”吧!1.前言...
    99+
    2023-06-29
  • ASP.NET Core在WebApi项目中怎么使用Cookie
    这篇文章主要讲解了“ASP.NET Core在WebApi项目中怎么使用Cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core在WebApi项...
    99+
    2023-06-29
  • ASP.net Core微信平台开发怎么配置Token
    今天小编给大家分享一下ASP.net Core微信平台开发怎么配置Token的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作