• IOC容器3


    一、Options注入模式

    (相当于对appsettings.json根据字段映射到Model数据类,然后通过构造函数注入使用)

    强类型的 Options

    Options is a framework for accessing and configuring POCO settings.

    简单来说,Options 就是将一个 POCO 的配置类,通过在Startup类中注册到容器中,在后续使用的时候使用构造函数注入来获取到POCO对象。我们将这种编程模式称为Options模式。

    语法格式:services.Configure<TOptions>(Options.Options.DefaultName, config);

    TOptions作为实体类对象强类型

    首先定义一个 Options

    public class MyOptions
    {
        public string DefaultValue { get; set; }
    }

    然后我们在对应的appsettings.json中添加如下片段:

    {
      "MyOptions": {
        "DefaultValue" : "first"
      }
    }

    Startup中的ConfigureServices方法中,进行服务的注册:

    public void ConfigureServices(IServiceCollection services)  
    {
        services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
    }

    最后,便在控制器中注入IOptions<MyOptions>,通过其Value属性对MyOptions进行访问:

    [Route("api/[controller]")]
    public class ValuesController : Controller  
    {
        private readonly MyOptions _options;
        public ValuesController(IOptions<MyOptions> options)
        {
            _options = options.Value;
        }
    
        [HttpGet]
        public string Get()
        {
            return _options.DefaultValue;
        }
    }

    二、Configure 方法

    Options框架为我们提供了一系统的IServiceCollection的扩展方法,方便我们的使用。

    直接使用Action配置

    // 最简单的注册方式
    services.Configure<MyOptions>(o => o.DefaultValue = true);
    
    // 指定具体名称
    services.Configure<MyOptions>("my", o => o.DefaultValue = true);
    
    // 配置所有实例
    services.ConfigureAll<MyOptions>(o => o.DefaultValue = true);

    通过配置文件进行配置

    // 使用配置文件来注册实例
    services.Configure<MyOptions>(Configuration.GetSection("Sign"));
    
    // 指定具体名称
    services.Configure<MyOptions>("my", Configuration.GetSection("Sign"));
    
    // 配置所有实例
    services.ConfigureAll<MyOptions>(Configuration.GetSection("Sign"));

    PostConfigure方法

    PostConfigure 方法在 Configure 方法之后执行,是2.0中新增加的。

    services.PostConfigure<MyOptions>(o => o.DefaultValue = true);
    services.PostConfigure<MyOptions>("smyign", o => o.DefaultValue = true);
    services.PostConfigureAll<MyOptions>(o => o.DefaultValue = true);

    ConfigureNamedOptions

  • 相关阅读:
    C++学习笔记----2.4 C++对象的内存模型
    C++学习笔记(2)---2.5 C++函数编译原理和成员函数的实现
    C++学习笔记(1)-构造函数与析构函数
    学习笔记(5)---数学运算
    学习笔记(4)---协方差和特征向量的意义
    学习笔记(3)---安装SVM问题及解决方法
    学习笔记(2)---Matlab 图像处理相关函数命令大全
    数据增删查改操作总结
    表操作总结
    touch命令修改时间
  • 原文地址:https://www.cnblogs.com/fger/p/12170301.html
Copyright © 2020-2023  润新知