日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 配置 - 创建自定义配置提供程序

發(fā)布時間:2023/12/4 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 配置 - 创建自定义配置提供程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ASP.NET Core 配置 - 創(chuàng)建自定義配置提供程序

在本文中,我們將創(chuàng)建一個自定義配置提供程序,從數(shù)據(jù)庫讀取我們的配置。我們已經(jīng)了解了默認配置提供程序的工作方式,現(xiàn)在我們將實現(xiàn)我們自己的自定義配置提供程序。

對于自定義配置提供程序,我們將使用 Entity Framework Core,并結(jié)合 SQL Server 數(shù)據(jù)庫。

在這篇文章中,我們將討論:

?初始化 EF Core?實現(xiàn)自定義 EF Core 提供程序?運行應用程序?結(jié)論

首先,讓我們使用數(shù)據(jù)庫優(yōu)先方法升級我們的解決方案以支持 EF Core 。

初始化 EF Core

在我們開始之前,我們需要先安裝兩個 Nuget 包:?PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 3.1.7

我們需要這個包,因為我們將使用 SQL Server 實例,并且:?PM> Install-Package Microsoft.EntityFrameworkCore.Tools -v 3.1.7

因為我們將通過 CLI 執(zhí)行數(shù)據(jù)庫的初始創(chuàng)建和遷移。

我們需要一個包含鍵值配置對的類(Models 文件夾):

public class ConfigurationEntity {[Key]public string Key { get; set; }public string Value { get; set; } }

和一個DbContext類(模型文件夾):

public class ConfigurationDbContext : DbContext {public ConfigurationDbContext(DbContextOptions options): base(options){}public DbSet<ConfigurationEntity> ConfigurationEntities { get; set; } }

我們只需要一個DbSet的ConfigurationEntity,這將映射到我們的數(shù)據(jù)庫中的表。

現(xiàn)在我們只需要ConfigureServices()在Startup類中的方法中建立到我們的服務器的連接:

services.AddDbContext<ConfigurationDbContext>(opts =>opts.UseSqlServer(Configuration.GetConnectionString("sqlConnection")));

當然,您需要將appsettings.json文件中的連接字符串更改為您的數(shù)據(jù)庫。如果您使用的是 SqlExpress,它很可能如下所示:

"ConnectionStrings": {"sqlConnection": "server=.\\SQLEXPRESS; database=CodeMazeCommerce; Integrated Security=true" },

就是這樣,現(xiàn)在我們可以簡單地通過包管理器控制臺添加初始遷移:?PM> Add-Migration InitialSetup

并將該遷移應用于數(shù)據(jù)庫:?Update-Database

現(xiàn)在我們的數(shù)據(jù)庫已創(chuàng)建并準備好用于存儲配置數(shù)據(jù)。

實現(xiàn)自定義 EF Core 提供程序

首先,讓我們在 Models 文件夾中創(chuàng)建一個文件夾 ConfigurationProviders,以便正確地對我們的類進行分組。

之后,我們需要通過繼承ConfigurationProvider類來實際創(chuàng)建一個配置提供者。我們將在ConfigurationProviders文件夾中創(chuàng)建我們自己的提供程序類并將其命名為EFConfigurationProvider:

public class EFConfigurationProvider : ConfigurationProvider {public EFConfigurationProvider(Action<DbContextOptionsBuilder> optionsAction){OptionsAction = optionsAction;}Action<DbContextOptionsBuilder> OptionsAction { get; }public override void Load(){var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();OptionsAction(builder);using (var dbContext = new ConfigurationDbContext(builder.Options)){dbContext.Database.EnsureCreated();Data = !dbContext.ConfigurationEntities.Any()? CreateAndSaveDefaultValues(dbContext): dbContext.ConfigurationEntities.ToDictionary(c => c.Key, c => c.Value);}}private static IDictionary<string, string> CreateAndSaveDefaultValues(ConfigurationDbContext dbContext){var configValues =new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase){{ "Pages:HomePage:WelcomeMessage", "Welcome to the ProjectConfigurationDemo Home Page" },{ "Pages:HomePage:ShowWelcomeMessage", "true" },{ "Pages:HomePage:Color", "black" },{ "Pages:HomePage:UseRandomTitleColor", "true" }};dbContext.ConfigurationEntities.AddRange(configValues.Select(kvp => new ConfigurationEntity{Key = kvp.Key,Value = kvp.Value}).ToArray());dbContext.SaveChanges();return configValues;} }

這門課乍一看可能有點嚇人,但其實沒那么嚇人。

構造函數(shù)有一個參數(shù),即委托Action<DbContextOptionsBuilder> optionsAction。稍后我們將使用DbContextOptionsBuilder該類為我們的數(shù)據(jù)庫定義上下文。我們之前定義連接字符串時已經(jīng)完成了。我們公開了上下文選項構建器,以便向我們的自定義提供程序提供該選項。

我們正在重寫該Load()方法,以便ConfigurationEntity使用數(shù)據(jù)庫中的數(shù)據(jù)填充我們的方法,或者如果數(shù)據(jù)庫表為空,則創(chuàng)建一些默認的方法。這里的所有都是它的。

接下來,我們要將我們的配置提供程序注冊為源。為了做到這一點,我們需要實現(xiàn)IConfigurationSource接口。所以讓我們EFConfigurationSource在ConfigurationProviders文件夾中創(chuàng)建類:

public class EFConfigurationSource : IConfigurationSource {private readonly Action<DbContextOptionsBuilder> _optionsAction;public EFConfigurationSource(Action<DbContextOptionsBuilder> optionsAction){_optionsAction = optionsAction;}public IConfigurationProvider Build(IConfigurationBuilder builder){return new EFConfigurationProvider(_optionsAction);} }

我們只需要實現(xiàn)該Build()方法,在我們的例子中,它會初始化配置,其中包含我們通過配置源構造函數(shù)發(fā)送的選項。

這看起來真的很令人困惑,所以讓我們看看如何將我們的數(shù)據(jù)庫配置提供程序添加到配置源列表中。我們將以與以前類似的方式進行:

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();}).ConfigureAppConfiguration((hostingContext, configBuilder) =>{var config = configBuilder.Build();var configSource = new EFConfigurationSource(opts =>opts.UseSqlServer(config.GetConnectionString("sqlConnection")));configBuilder.Add(configSource);});

如您所見,我們正在構建配置構建器以獲取IConfiguration. 我們需要它,因為我們的連接字符串存儲在appsettings.json文件中。現(xiàn)在我們可以使用該連接字符串創(chuàng)建一個配置源,并使用該configBuilder.Add()方法將其添加到現(xiàn)有配置源中。

現(xiàn)在我們要稍微清除一下 appsettings.json 文件:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"ConnectionStrings": {"sqlConnection": "server=.\\SQLEXPRESS; database=CodeMazeCommerce; Integrated Security=true"},"AllowedHosts": "*" }

我們刪除了“頁面”部分以確保它是從數(shù)據(jù)庫中讀取的。

我們需要刪除AddDbContext()我們之前在 Startup 類中使用的方法,因為它不再需要了。

public void ConfigureServices(IServiceCollection services) {//remove!!!services.AddDbContext<ConfigurationDbContext>(opts =>opts.UseSqlServer(Configuration.GetConnectionString("sqlConnection")));... }

由于本示例不需要任何遷移,因此請通過 SQL Management Studio 或通過 SQL Server 對象資源管理器手動創(chuàng)建一個名為“CodeMazeCommerce”的數(shù)據(jù)庫。

就是這樣,讓我們運行應用程序。

運行應用程序

現(xiàn)在,如果我們運行應用程序,在Startup類中放置一個斷點,并檢查Configuration對象,我們將找到我們的配置源:

如果我們檢查數(shù)據(jù)庫,我們會看到它被填充:

讓我們繼續(xù)執(zhí)行,看看我們的應用程序是否仍然按預期工作:

它仍然像以前一樣工作!您可以多次刷新頁面以確保標題的顏色仍會發(fā)生變化。

結(jié)論

在這篇簡短的文章中,我們已經(jīng)了解了如何實現(xiàn)我們自己的自定義配置提供程序來讀取數(shù)據(jù)庫中的值。

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core 配置 - 创建自定义配置提供程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 影音先锋欧美在线 | 丁香av| 久草福利在线 | 久久久久国产精品 | 国产免费又黄又爽又色毛 | av激情网站| 自拍偷拍视频在线观看 | 丰满少妇久久久久久久 | 成人自拍视频网 | 999这里有精品 | 亚洲深夜| 日韩城人视频 | 浪漫樱花在线观看高清动漫 | 午夜性福利视频 | 视频在线免费 | 久久久久国产精品 | 国产亚洲精品美女久久久久 | 国产爽视频 | 国产91av视频 | 天堂а√在线中文在线鲁大师 | 久久青青操 | 日本一区二区三区视频在线观看 | 亚洲午夜久久久久久久国产 | 青青青青草 | 黄色网页在线免费观看 | 国产成人精品在线视频 | 日本精品一区二区三区四区 | 在线播放黄色av | 欧美少妇xxxxx | 国产av成人一区二区三区 | 最新日韩视频 | 特级西西444www大精品视频免费看 | 国内激情自拍 | 偷拍一区二区三区四区 | 麻豆免费观看视频 | 日本免费精品 | 国产一级片毛片 | 天堂在线v | 在线观看波多野结衣 | 亚洲深夜福利视频 | 亚洲一区二区三区四区在线 | 欧洲高潮三级做爰 | 国产911视频 | 亚色视频在线观看 | 亚洲色偷偷综合亚洲av伊人 | 性欧美熟妇videofreesex | 色片网站在线观看 | a在线一区| 精品一二三区 | 杨幂一区二区三区免费看视频 | 一级片在线免费观看视频 | 91亚洲精品国偷拍 | 9l视频自拍蝌蚪9l视频 | 亚洲国产精品成人 | 超碰在线人人草 | 男人的亚洲天堂 | 超碰人人网 | 国产高清免费在线 | 亚洲视频在线免费播放 | 奇米影视首页 | 国产av自拍一区 | 亚洲乱码一区 | 欧洲人妻丰满av无码久久不卡 | 男插女视频免费 | 懂色av懂色av粉嫩av分享吧 | 国产在线a视频 | 亚洲干干干 | 自拍毛片| 亚洲最大的黄色网 | 成年人视频在线观看免费 | 国产欧美日韩视频 | 女人一区二区三区 | 黄色三级生活片 | 日韩在线视频观看免费 | 97色在线视频 | 在线免费观看黄色 | 337p粉嫩大胆色噜噜噜 | 日日涩| 在线不卡视频 | 中文字幕丰满孑伦无码专区 | 国产白丝一区二区三区 | 少妇与公做了夜伦理69 | 成人免费视频网 | 大地资源在线观看免费高清版粤语 | 91在线观看 | 天天综合网站 | 1区2区3区在线观看 久久久久久久久久久影院 成人网址在线观看 | 成人精品电影 | 精品人伦一区二区三 | 精品少妇人妻av免费久久久 | 国产999在线| 爱情岛论坛亚洲品质自拍 | 久久机热 | 狂野欧美性猛交xxⅹ李丽珍 | 久久久久久亚洲 | a视频免费看 | 成人3d动漫在线观看 | 国产美女视频免费观看下载软件 | 亚洲国产成人一区二区精品区 |