首页后端开发ASP.NETasp.net core选项配置的研究

asp.net core选项配置的研究

时间2023-12-03 03:18:03发布访客分类ASP.NET浏览592
导读:asp.net-core选项模块是全新,可拓展的框架,其作用在整个.net-core框架中,就像依赖注入一样无处不在,是一个很重要的组件。其实配置模块与选项模块是紧密相连的,我们可以使用ConfigureBuilder类来使用配置,但是在S...

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

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

public interface IOptionsout TOptions>
 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.ConfigureMyOptions>
    (Configuration);
    

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

private readonly MyOptions _options;

public string SimpleOptions{
     get;
     private set;
}
    

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

public IndexModel(IOptionsMyOptions>
 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";

}
    

h3>
    基本选项配置, 不派生自IOptions接口的实现/h3>
    
@Model.SimpleOptions

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

public class MyOptionsDelegate : IOptionsMyOptionsDelegate>

{

    public MyOptionsDelegate()
    {
    
        Option1 = "value1 from ctor";

    }


    public string Option1 {
     get;
     set;
 }

    public int Option2 {
     get;
     set;
 }
     = 5;


    public MyOptionsDelegate Value
    {

        get {
     return this;
 }

    }

}
    

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

public static IServiceCollection AddOptionsByDelegate(this IServiceCollection services, ActionMyOptionsDelegate>
 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(IOptionsMyOptions>
     optionAccessor, IOptionsMyOptionsDelegate>
 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中:

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

运行如下:

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: asp.net core选项配置的研究
本文地址: https://pptw.com/jishu/565641.html
asp.net core上使用Redis探索(2) ASP.NET MVC不可或缺的部分——DI及其本质工作分析

游客 回复需填写必要信息