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

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

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

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

  

猜你喜欢

转载自www.cnblogs.com/gdsblog/p/10004062.html