[外包]!采用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咱們嘮嘮嗑

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM