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


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

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

    • 配置文件强类型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咱们唠唠嗑

      

  • 相关阅读:
    做一天业务员的感觉:辛苦!
    我的乒乓生涯之三浑浑噩噩的中学六年
    名菊照片(二)
    今天,同事的裤子破了
    昨晚,再一次兵败滑铁卢
    今天去世纪公园看名菊展,拍了好多照片发上来大家一起欣赏:)
    寻找上海市乒友喜欢打乒乓的朋友都进来看看
    同学给我两张f1照片:)
    又搞到几张f1照片,发上来给大家养眼
    我的乒乓生涯之四乒乓姻缘
  • 原文地址:https://www.cnblogs.com/gdsblog/p/10004062.html
Copyright © 2020-2023  润新知