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