翻譯|使用教程|編輯:龔雪|2025-06-05 10:50:12.043|閱讀 95 次
概述:本文將為大家介紹DevExpress XAF將.NET Aspire集成到Blazor項(xiàng)目中后如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)依賴,歡迎下載最新版組件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
DevExpress XAF是一款強(qiáng)大的現(xiàn)代應(yīng)用程序框架,允許同時(shí)開發(fā)ASP.NET和WinForms。DevExpress XAF采用模塊化設(shè)計(jì),開發(fā)人員可以選擇內(nèi)建模塊,也可以自行創(chuàng)建,從而以更快的速度和比開發(fā)人員當(dāng)前更強(qiáng)有力的方式創(chuàng)建應(yīng)用程序。
.NET Aspire是一組工具、模板和包,用于構(gòu)建可觀察的、可生產(chǎn)的應(yīng)用程序。DevExpress XAF團(tuán)隊(duì)花費(fèi)了一些時(shí)間考慮Aspire的功能,試圖找到最好的集成點(diǎn),讓XAF開發(fā)人員能夠利用Aspire開箱即用的業(yè)務(wù)流程特性。
DevExpress技術(shù)交流群11:749942875 歡迎一起進(jìn)群討論
在最近的一篇文章中我們介紹了如何對(duì)一個(gè) XAF Blazor 項(xiàng)目進(jìn)行調(diào)整,來(lái)支持 .NET Aspire()。通過(guò)對(duì)啟動(dòng)邏輯進(jìn)行一些修改——包括標(biāo)準(zhǔn)的 XAF 項(xiàng)目模板和 Aspire 的 Visual Studio 向?qū)傻拇a,已經(jīng)可以讓 XAF Blazor 項(xiàng)目作為 Aspire 編排體系的一部分運(yùn)行了。但那只是最小規(guī)模的編排,只有一個(gè)模塊!接下來(lái)我們將會(huì)把部署方面的內(nèi)容留到第三篇(敬請(qǐng)關(guān)注!),接下來(lái)得系列文章將介紹在示例項(xiàng)目中為實(shí)現(xiàn)以下三個(gè)場(chǎng)景所做的修改:
完整示例項(xiàng)目已托管在這個(gè)中。下面基于我在第一篇文章中描述的項(xiàng)目初始狀態(tài),展開說(shuō)明新的功能實(shí)現(xiàn)。
在上文中(),我們?yōu)榇蠹医榻B了如何利用 OpenTelemetry 支持自定義指標(biāo)與活動(dòng)日志,本文將繼續(xù)介紹如何將SQL Server添加為容器依賴項(xiàng),歡迎繼續(xù)關(guān)注我們~
Aspire最大的優(yōu)點(diǎn)之一是它可以為您處理應(yīng)用程序系統(tǒng)的基礎(chǔ)設(shè)施依賴關(guān)系。現(xiàn)在有許多NuGet包,通常以Aspire.Hosting.開頭命名,它提供了與特定體系結(jié)構(gòu)組件接口的封裝器。其中一個(gè)這樣的組件是SQL Server,Aspire.Hosting.SqlServer包使其可用。
注意,NuGet包引用需要添加到項(xiàng)目XafAspire.AppHost中,因?yàn)镾QL Server實(shí)例將在這里配置。
第二個(gè)注意事項(xiàng):要將容器作為Aspire業(yè)務(wù)流程的一部分運(yùn)行,您需要安裝容器運(yùn)行時(shí)。如果您需要這一步的幫助,請(qǐng)查看。
要聲明業(yè)務(wù)流程需要一個(gè)SQL Server組件,并且它是Blazor服務(wù)器進(jìn)程的依賴,您只需要在文件XafAspireDemo.AppHost/Program.cs中添加幾行代碼:
var builder = DistributedApplication.CreateBuilder(args); --> var sql = builder.AddSqlServer("sql") --> .WithLifetime(ContainerLifetime.Persistent); --> var db = sql.AddDatabase("XafAspireDemoDb"); builder .AddProject<Projects.XafAspireDemo_Blazor_Server>("xafaspiredemo-blazor-server") .WithHttpsEndpoint() --> .WithReference(db) --> .WaitFor(db); builder.Build().Run();
首先,對(duì)AddSqlServer的調(diào)用為您的應(yīng)用程序系統(tǒng)建立業(yè)務(wù)流程的組件。調(diào)用WithLifetime(ContainerLifetime.Persistent)在開發(fā)中通常很有用,因?yàn)槿萜鲗㈦S著應(yīng)用程序系統(tǒng)的每次運(yùn)行而啟動(dòng)和停止,這將導(dǎo)致任何測(cè)試數(shù)據(jù)的丟失。使用Persistent參數(shù),當(dāng)應(yīng)用程序系統(tǒng)的其余部分停止時(shí),容器仍在運(yùn)行,這加快了下一次運(yùn)行的速度并保留了數(shù)據(jù)。
演示數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)引用被傳遞給Blazor Server項(xiàng)目,WaitFor調(diào)用確保在Blazor Server應(yīng)用程序嘗試訪問(wèn)數(shù)據(jù)庫(kù)之前,數(shù)據(jù)庫(kù)已準(zhǔn)備好進(jìn)行操作。
這種與SQL Server一起工作的方法不需要您了解任何關(guān)于連接字符串和其他特定細(xì)節(jié),這是非常方便的!
當(dāng)然,我們現(xiàn)在需要弄清楚Blazor服務(wù)器應(yīng)用程序是如何連接到新的依賴項(xiàng)的。Aspire有一些自動(dòng)處理,可以發(fā)現(xiàn)如何與SQL Server的容器聯(lián)系,并且在環(huán)境變量中自動(dòng)提供連接字符串。該變量的名稱的構(gòu)造類似于重載配置文件內(nèi)容的環(huán)境變量,并且它在設(shè)置中合并了數(shù)據(jù)庫(kù)的名稱。對(duì)于上面的代碼,環(huán)境變量名是ConnectionStrings__XafAspireDemoDb。
通過(guò)在當(dāng)前點(diǎn)運(yùn)行應(yīng)用程序,記住到新容器化數(shù)據(jù)庫(kù)的連接尚未被使用,您可以看到SQL Server容器已經(jīng)啟動(dòng)(例如在Docker Desktop中),并且儀表板正確顯示了新的依賴項(xiàng),帶有連接字符串的環(huán)境變量也可以在儀表板中看到。
連接字符串包括一個(gè)本地端口號(hào),由Aspire提供的代理服務(wù)提供,數(shù)據(jù)庫(kù)用戶sa的密碼由Aspire適配器自動(dòng)生成。
現(xiàn)在缺少一個(gè)允許Blazor Server應(yīng)用程序使用容器化SQL Server的更改,編輯文件XafAspireDemo.Blazor.Server/Startup.cs,并在ConfigureServices方法中找到分配connectionString的塊。在默認(rèn)的XAF模板中,代碼通過(guò)調(diào)用Configuration.GetConnectionString加載連接字符串,將此代碼替換為對(duì)環(huán)境變量的簡(jiǎn)單求值:
//options.UseInMemoryDatabase("InMemory"); // The environment variable is published by the Aspire Host --> string connectionString = --> Environment.GetEnvironmentVariable("ConnectionStrings__XafAspireDemoDb"); #if EASYTEST if ( Configuration.GetConnectionString("EasyTestConnectionString")
現(xiàn)在您可以再次運(yùn)行應(yīng)用程序,容器中的SQL Server將被使用,替代之前使用的任何其他實(shí)例。
將項(xiàng)目設(shè)置為使用基礎(chǔ)設(shè)施容器的一個(gè)重要細(xì)節(jié)是,其他開發(fā)人員可以輕松地在他們的機(jī)器上執(zhí)行項(xiàng)目,而無(wú)需準(zhǔn)備環(huán)境。例如,此時(shí)我能夠在自己的Mac上運(yùn)行完整的演示解決方案!在這方面,我想提兩個(gè)細(xì)節(jié)。
首先,我只是在Mac上使用dotnet run --project XafAspireDemo.AppHost,當(dāng)試圖在儀表板中執(zhí)行任何操作時(shí),就會(huì)出現(xiàn)大量的警告和錯(cuò)誤。事實(shí)證明,發(fā)生這種情況是因?yàn)闆](méi)有明確信任.NET生成的開發(fā)時(shí)HTTPS證書。這通常不是什么大問(wèn)題,它只是偶爾會(huì)導(dǎo)致警告,但Aspire Dashboard似乎在更大程度上依賴于這些證書來(lái)進(jìn)行g(shù)RPC連接。
您可以在中閱讀有關(guān)在ASP.NET Core中使用HTTPS的所有內(nèi)容,簡(jiǎn)單的命令dotnet dev-certs https --trust可以建立必要的信任,并消除gRPC連接問(wèn)題。
其次,在沒(méi)有附加調(diào)試器的情況下運(yùn)行時(shí),XAF的標(biāo)準(zhǔn)操作在自動(dòng)數(shù)據(jù)庫(kù)模式更新和更新程序執(zhí)行方面發(fā)生了變化。在生產(chǎn)部署中,您可以按照這里的XAF文檔中的描述來(lái)處理這個(gè)問(wèn)題,但是出于開發(fā)目的,我決定擴(kuò)展自動(dòng)更新機(jī)制,以涵蓋正在使用的Aspire場(chǎng)景。
我們編輯了文件XafAspireDemo.Blazor.Server/BlazorApplication.cs,其中包含一行,用于檢查環(huán)境是否有附加的調(diào)試器—如果找到了,則執(zhí)行自動(dòng)更新。我們拓展了這一行,來(lái)接受一個(gè)環(huán)境變量作為替代:
--> if(Environment.GetEnvironmentVariable("ASPIRE_DEBUG") != null || System.Diagnostics.Debugger.IsAttached) { e.Updater.Update(); e.Handled = true; } 現(xiàn)在修改了XafAspireDemo.AppHost/Program.cs中的Aspire主機(jī)啟動(dòng)邏輯,以便在啟動(dòng)時(shí)設(shè)置這個(gè)變量: builder .AddProject<Projects.XafAspireDemo_Blazor_Server>("xafaspiredemo-blazor-server") --> .WithEnvironment("ASPIRE_DEBUG", "true") .WithHttpsEndpoint() .WithReference(db) .WaitFor(db);
有了這些改變,演示解決方案現(xiàn)在可以在Mac上完美運(yùn)行了!
未完待續(xù),我們下期再見(jiàn)!更多產(chǎn)品資訊及授權(quán),歡迎來(lái)電咨詢:023-68661681
慧都是?家?業(yè)數(shù)字化解決?案公司,專注于軟件、?油與?業(yè)領(lǐng)域,以深?的業(yè)務(wù)理解和?業(yè)經(jīng)驗(yàn),幫助企業(yè)實(shí)現(xiàn)智能化轉(zhuǎn)型與持續(xù)競(jìng)爭(zhēng)優(yōu)勢(shì)。
慧都科技是DevExpress的中國(guó)區(qū)的合作伙伴,DevExpress作為用戶界面領(lǐng)域的優(yōu)秀產(chǎn)品,幫助企業(yè)高效構(gòu)建權(quán)限管理、數(shù)據(jù)可視化(如網(wǎng)格/圖表/儀表盤)、跨平臺(tái)系統(tǒng)(WinForms/ASP.NET/.NET MAUI)及行業(yè)定制解決方案,加速開發(fā)并強(qiáng)化交互體驗(yàn)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)