博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net core选项配置的研究
阅读量:6113 次
发布时间:2019-06-21

本文共 2806 字,大约阅读时间需要 9 分钟。

asp.net-core选项模块是全新,可拓展的框架,其作用在整个.net-core框架中,就像依赖注入一样无处不在,是一个很重要的组件。

其实配置模块与选项模块是紧密相连的,我们可以使用ConfigureBuilder类来使用配置,但是在Startup类中,我们使用了依赖注入来实现IConfiguration接口(Startup类中的构造函数中使用依赖注入来实例化IConfiguration接口),通过这个接口对象来实现各种配置。但是配置不是我们主要讲的,这篇文章主要分析选项模块。

要说选项就一定要了解IOptions<TOptions>接口,这个接口只要有个属性:

public interface IOptions
where TOptions : class, new(){TOptions Value { get; }}

在这里我们从两个示例来描述选项。第一个示例就是微软官网的选项示例。首先定义一个MyOptions类:

public class MyOptions{    public string Option1 { get; set; }    public int Option2 { get; set; } = 5;    public MyOptions()    {        Option1 = "value1 from ctor";    }}

依赖注入实例化MyOptions类:

// 非派生自IOptions的类 DI注入(具体可以参考源码)services.Configure
(Configuration);

接下来我们在Index.cshtml.cs文件:

private readonly MyOptions _options;public string SimpleOptions{ get; private set;}

然后在IndexModel的构造函数中注入(主要就是实现依赖注入):

public IndexModel(IOptions
optionAccessor){ _options = optionAccessor.Value;}

在OnGet()方法中:

public void OnGet(){    var option1 = _options.Option1;    var option2 = _options.Option2;    SimpleOptions = $"option1 = {option1}, option2 = {option2}";}

接下来在就是Index.cshtml:

@page@model IndexModel@using OptionsBeta.Models@{ViewData["Title"] = "Home page";}

基本选项配置, 不派生自IOptions接口的实现

@Model.SimpleOptions

但是一般情况下我们都是继承自IOptions接口做我们自己的选项。那么应该怎么来做呢?代码如下:

public class MyOptionsDelegate : IOptions
{ public MyOptionsDelegate() { Option1 = "value1 from ctor"; } public string Option1 { get; set; } public int Option2 { get; set; } = 5; public MyOptionsDelegate Value { get { return this; } }}

我们实现一个IOptions<TOptions>的类,接着我们基于IServiceCollection接口拓展一个方法:

public static IServiceCollection AddOptionsByDelegate(this IServiceCollection services, Action
setupAction){ services.Configure(setupAction); return services;}

然后我们在ConfigurationServices方法中注入实例:

// 拓展方法的方式实现services.AddOptionsByDelegate(myOptions =>{    myOptions.Option1 = "rrrrrrrrrrrrrrrrrrrrrrrrrr";    myOptions.Option2 = 280000;});

接下来,Index.cshtml.cs文件:

private readonly MyOptionsDelegate _optionsDelagate;public IndexModel(IOptions
optionAccessor, IOptions
optionsDelegate){ _options = optionAccessor.Value; _optionsDelagate = optionsDelegate.Value;}public string SimpleOptionsByDelagate { get; private set; }

在OnGet方法中:

var optionsByDelegate3 = _optionsDelagate.Option1;var optionsByDelegate4 = _optionsDelagate.Option2;SimpleOptionsByDelagate = $"optionsByDelegate3 = {optionsByDelegate3}, optionsByDelegate4 = {optionsByDelegate4}";

在Index.cshtml中:

基于委托配置简单选项, 派生自IOptions接口的实现并使用了拓展方法的方式注入依赖

@Model.SimpleOptionsByDelagate

运行如下:

demo代码: 链接:https://pan.baidu.com/s/1CqS8xRd_gzPxhke96mGITA 密码:28wn

转载于:https://www.cnblogs.com/zhiyong-ITNote/p/8969455.html

你可能感兴趣的文章
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>