天天看点

实现.NET Core配置Provider之EF

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

在使用配置的时候都是先<code>new ConfigurationBuilder()</code>,最后调用<code>Build()</code>方法赋值给<code>Configuration</code>属性。那我们就从这个Build方法说起。

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

每个Provider里都有一个<code>Load</code>方法ConfigurationRoot的构造函数会遍历所有的Provider调用它的Load方法。Load方法里需要做的就是把配置源里的配置转换为<code>IDictionary&lt;string,string&gt;</code>。

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

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

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

接着需要定义一个<code>ConfigurationDbContext</code>用于存储和访问配置。

<code>EFConfigurationOptionsBuilder</code>是自定义的类它包含2个属性一个用于指定存储配置表的名称另一个用于配置数据库连接及其他配置。

自定义Provider可继承<code>ConfigurationProvider</code>实现。在ConfigurationProvider中Load是一个虚方法自定义Provider需要实现Load方法。

EFConfigurationSource继承<code>IConfigurationSource</code>实现了Build方法在Build中返回EFConfigurationProvider。

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

上面我使用SQLite演示也可以使用SQL Server、MySql、PostgreSQL等。默认配置表的名称为Configuration。

本项目已在github上开源地址ht t p s: / / g i t h u b  . co m / c h e n g xu l v t u / C x l t.Extensions.Configuration

在项目中使用可以执行下面的命令

dotnet add package Cxlt.Extensions.Configuration.EF

本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1942912 ,如需转载请自行联系原作者

继续阅读