实现。网络核心配置提供者之EF

  

《10分钟就能学的会。网络核心配置》里详细介绍了。净核心配置的用法另外我还开源了自定义的配置ProviderEF配置提供者和Yaml配置供应商。本文先来聊聊EF配置提供者的实现其中会涉及到EntityFramework核心的知识不熟悉也没关系且听我慢慢讲来。

配置执行流程

在使用配置的时候都是先<代码>新ConfigurationBuilder()> 建立()方法赋值给<代码>配置属性。那我们就从这个建造方法说起。

建造方法做了什么呢它遍历了所有的配置源等等配置源哪来的还记不记得<代码> AddJsonFile ,<代码> AddCommandLine 这些扩展方法它们做的事情就是将配置源添加到ConfigurationBuild中。每个配置源都有一个制造方法它返回一个提供者。遍历所有配置源时调用配置源的制造方法就获得了所有配置源的提供者最后通过构造函数传给<代码> ConfigurationRoot>

每个提供者里都有一个<代码> 方加载法ConfigurationRoot的构造函数会遍历所有的提供者调用它的负载方法.Load方法里需要做的就是把配置源里的配置转换为<代码> IDictionary<字符串,string>

了解了配置执行的流程就可以动手实现自己的提供者了。

EF存储

Json配置提供者的配置存储在Json文件中基于英孚的提供者的配置则是存储在数据库中因为使用了英孚我们不需要关心使用的是什么数据库。

在数据库中存储配置不支持嵌套和数组只是简单的键值对形式对应数据库表中的两列,使用EF需要先定义一个实体存储配置它包含两个属性对应数据库表中的两列。

 internal  class 配置
  {
  ,,,public  string  Key {组,得到,,,}
  
  ,,,public  string  Value {组,得到,,,}
  }

接着需要定义一个<代码> ConfigurationDbContext>

 internal  class  ConfigurationDbContext : DbContext
  {
  ,,,private  EFConfigurationOptionsBuilder  Builder {,得到;}
  
  ,,,public  ConfigurationDbContext (EFConfigurationOptionsBuilder 选项),:,基地(options.DbContextOptions.Options)
  ,,,{
  ,,,,,,,Builder =,选项;
  ,,,}
  
  ,,,public  DbSet, Configurations {组,得到,,,}
  }

<代码> EFConfigurationOptionsBuilder>

EFConfigurationProvider

自定义提供者可继承<代码> ConfigurationProvider 实现。在ConfigurationProvider中负载是一个虚方法自定义提供者需要实现加载方法。

 internal  class  EFConfigurationProvider : ConfigurationProvider
  {
  ,,,Action, OptionsAction {,得到;}
  
  ,,,public  EFConfigurationProvider (Action 

EFConfigurationSource

EFConfigurationSource继承<代码> IConfigurationSource 实现了建造方法在构建中返回EFConfigurationProvider。

 internal  class  EFConfigurationSource : IConfigurationSource
  {
  ,,,private  readonly  Action, _optionsAction;
  
  ,,,public  EFConfigurationSource (Action 

AddEntityFramework扩展方法

为添加EF配置源增加一个扩展方法。

 public  static  class  EFConfigurationExtensions
  {
  ,,,public  static  IConfigurationBuilder  AddEntityFramework(却;能够IConfigurationBuilder 构建器,,Action,设置)
  ,,,{
  ,,,,,,,return  builder.Add (new  EFConfigurationSource(设置);
  ,,,}
  }

实现。网络核心配置提供者之EF