[外包]!采用asp.net core 快速构建小型创业公司后台管理系统(二.config强类型)

news/2024/7/2 23:02:53

接着上一章继续聊这个项目

本章主要会介绍到一下几点

  • 配置文件强类型model转化
  • redis使用

一.基础类接口的实现

  1.首先创建IConfigGeter接口

  

  接口代码如下:

  

public interface IConfigGeter
    {
        TConfig Get<TConfig>(string key);
        TConfig Get<TConfig>();
        String this[string key] { get; }
    }

  2.实现接口

  

  接口实现代码如下

/// <summary>
    /// 配置文件提供者
    /// </summary>
    public class ConfigGeter : IConfigGeter
    {
        private readonly IConfiguration _configuration;

        public ConfigGeter(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        public TConfig Get<TConfig>(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(key));
            var section = _configuration.GetSection(key);
            return section.Get<TConfig>();
        }

        public TConfig Get<TConfig>()
        {
            return Get<TConfig>(typeof(TConfig).FullName);
        }

        public string this[string key] => _configuration[key];
    }

  3.创建一个ConfigLocator配置文件获取器

  

  实现代码如下:

public class ConfigLocator
    {
        private readonly IConfigGeter _currentServiceProvider;
        private static IConfigGeter _serviceProvider;

        public ConfigLocator(IConfigGeter currentServiceProvider)
        {
            _currentServiceProvider = currentServiceProvider;
        }

        public static ConfigLocator Instance => new ConfigLocator(_serviceProvider);

        public static void SetLocatorProvider(IConfigGeter serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        public TConfig Get<TConfig>(String key)
        {
            return _currentServiceProvider.Get<TConfig>(key);
        }

        public TConfig Get<TConfig>()
        {
            return _currentServiceProvider.Get<TConfig>(typeof(TConfig).Name);
        }

        public String this[string key] => _currentServiceProvider[key];
    }

 

二.在program里将其注入,注意这里我没有放到startup

  

  我们自定义了一个HostBuilder类,里面定义了两个方法:ProgramMain()和CreateDefaultBuilder();,

   

  实现代码如下:

  

public static class HostBuilder
    {

        public static void ProgramMain(Action main)
        {
            main();
        }

        /// <summary>
        /// 加入自定义默认配置
        /// </summary>
        /// <param name="webHostBuilder"></param>
        /// <returns></returns>
        public static IWebHostBuilder CreateDefaultBuilder(this IWebHostBuilder webHostBuilder) =>
            webHostBuilder.ConfigureAppConfiguration(
                (ctx, config) => ConfigLocator.SetLocatorProvider(new ConfigGeter(config.Build())))
                .ConfigureServices((ctx, services) =>
                {
                    services
                    .AddRegisterContainer();
                });
    }

  注意:这里是我们使用配置文件的关键:

  webHostBuilder.ConfigureAppConfiguration(

                (ctx, config) => ConfigLocator.SetLocatorProvider(new ConfigGeter(config.Build())))

三.在控制器里使用一下我们的ConfigLocator试试效果如何

  1.在appsetting.json里加一些配置信息

  如图:

  

  这里我们获取一下单键的值,以及复合类型的值,eg:Log4NetConfig,Persion,大家记得他们的值是多少我么在控制器里获取一下

  2.新建测试控制器,为何不用单元测试呢?你们懂的,,,我就不多说了

  如图:

  

  代码如下:

  

namespace TB.AspNetCore.WebSite.Controllers
{
    public class Persion
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            var log4net = ConfigLocator.Instance["Log4NetConfig"];

            var persion = ConfigLocator.Instance.Get<Persion>("Persion");


            return View();
        }
    }
}

  3.测试结果

  快速监视结果显示是我们配置文件的值

  

  

 

 本章就扯到这里吧,说多了就没意识了,下章会说一下Redis在我这里的玩法,会涉及到redis的发布订阅,以及redis的timeout问题

  • 下载redis咱们唠唠嗑

 

 

  

 


http://www.niftyadmin.cn/n/1102381.html

相关文章

如何使用Kubernetes里的NetworkPolicy

创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件。 第九行的podSelector指定这个NetworkPolicy施加在哪些pod上&#xff0c;通过label来做pod的过滤。 从第16行开始的ingress定义&#xff0c;定义了只有具备标签componentads,moduleapp的pod才能够连接componentads, mo…

K8s 原理架构介绍(一)

一、Kubernetes 是什么 Kubernetes是当今最流行的开源容器管理平台&#xff0c;它就是大名鼎鼎的Google Borg的开源版本。Google在2014年推出了Kubernetes&#xff0c;本文发布时最新的版本是1.11。 Kubernetes源于希腊语&#xff0c;意为舵手&#xff0c;K8S是一个简称&#x…

ESP32 硬件开发指北 -- 外接FLASH使用指北

ESP32 硬件开发指北 ----外接FLASH权威指北 硬件环境&#xff1a; ESP32-D0WDESP32-D0WD-V3P25Q32H-UXH-IR USON8封装 软件环境&#xff1a; ESP-IDF V4.3 VScode插件版本 一、选型 ESP32选型&#xff1a; ESP32 将 External Flash 与 External SRAM 作为片外存储器。图1…

Pytorch —— 基础指北_壹 [什么是Torch]

Pytorch ——基础指北_壹 系列文章目录 Pytorch ——基础指北_零 Pytorch ——基础指北_壹 Pytorch ——基础指北_贰 Pytorch ——基础指北_叁 软件环境&#xff1a; pytorch 1.10pycharmCUDA 10.2 提示&#xff1a; 使用配套教程体验更好&#xff1a; youtobe教程&#…

Web开发实战——spring 应用笔记(壹)

Spring_前传(1) 软件环境&#xff1a; IDE:IDEA插件&#xff1a;spring InitializermongoDB&#xff1a;v5.0.6驱动项目类型&#xff1a;校园网项目 使用Lombok简化领域对象 领域对象(Domain Object)也被称为实体类&#xff0c;代表了业务的状态&#xff0c;贯穿表现层、业…

Spark快速大数据分析——Scala语言基础(壹)

Spark快速大数据分析——Scala语言基础&#xff08;壹&#xff09; 文章目录Spark快速大数据分析——Scala语言基础&#xff08;壹&#xff09;前记Scala的历史环境搭建&#xff1a;1、SBT构建工具和REPL&#xff1a;2、使用IDE&#xff1a;Scala 入门&#xff1a;一点点补充&a…

项目风险管理落地

发现很多做项目的同学&#xff0c;会忽略对项目风险的管理&#xff0c;以至于成为项目的救火队长&#xff0c;处理各种应急事件。为了让项目开展更顺畅&#xff0c;避免出现项目既乱又累的问题&#xff0c;不应以战术上的勤奋&#xff0c;掩盖战略上的懒惰&#xff0c;梳理总结…

2018年OpenStack用户调查报告出炉:Kubernetes仍居首

这份报告来自由OpenStack基金会发起的全球OpenStack用户调查项目&#xff0c;汇总了2017年8月至2018年8月期间1483个已完成的调查&#xff08;代表858个部署&#xff0c;来自441个独特的用户组织&#xff09;。作为第11次OpenStack用户调查&#xff0c;本次调查重点关注了全球用…