翻譯|使用教程|編輯:龔雪|2025-04-23 14:04:41.890|閱讀 115 次
概述:本文將為大家介紹DevExpress XAF如何將.NET Aspire集成到Blazor項目中,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
DevExpress XAF是一款強大的現代應用程序框架,允許同時開發ASP.NET和WinForms。DevExpress XAF采用模塊化設計,開發人員可以選擇內建模塊,也可以自行創建,從而以更快的速度和比開發人員當前更強有力的方式創建應用程序。
.NET Aspire是一組工具、模板和包,用于構建可觀察的、可生產的應用程序。DevExpress XAF團隊花費了一些時間考慮Aspire的功能,試圖找到最好的集成點,讓XAF開發人員能夠利用Aspire開箱即用的業務流程特性。該團隊認為Aspire是一個潛在的“一鍵解決方案”,是XAF解決方案向導中一些模板的更現代的替代品,它可以實現以下一些目標:
團隊希望能夠為客戶節省大量的時間,無論他們是否使用XAF!目前,由于Microsoft仍在快速開發Aspire,這在很大程度上是一個移動的目標。與此同時,一些功能已經被廣泛使用,可以認為是穩定的,所以現在我們決定發布一些細節,來幫助您在自己的XAF項目中使用Aspire工具。
在上文中(),我們主要為大家介紹了如何將將Aspire添加到XAF Blazor項目,本文將繼續介紹第三方軟件包的更新等。
DevExpress技術交流群11:749942875 歡迎一起進群討論
正如之前內容中所解釋的,由于Aspire是尖端技術,堅持使用最新版本是有意義的。為了保持一致性,官方建議使用所有內容的最新版本,建議在進行其他更改之前先這樣做。
您可以為每個項目打開NuGet包管理器并以這種方式安裝更新,但官方更建議使用Package Manager Console窗口(您可以從Visual Studio的工具菜單中打開它),Get-Package -updates命令顯示所有可用的更新:
PM> Get-Package -updates Id Versions Description ProjectName -- -------- ----------- ----------- Microsoft.EntityFrameworkCore.Sq... {9.0.3} Microsoft SQL Server database provider for... XafAspireDemo.Module Microsoft.Data.SqlClient {6.0.1} The current data provider for SQL Server a... XafAspireDemo.Module System.IdentityModel.Tokens.Jwt {8.6.1} Includes types that provide support for cr... XafAspireDemo.Module Microsoft.EntityFrameworkCore.In... {9.0.3} In-memory database provider for Entity Fra... XafAspireDemo.Module Microsoft.EntityFrameworkCore.Pr... {9.0.3} Lazy loading proxies for Entity Framework ... XafAspireDemo.Module No package updates are available from the current package source for project 'XafAspireDemo.Blazor.Server'. Aspire.Hosting.AppHost {9.1.0} Core library and MSBuild logic for .NET As... XafAspireDemo.AppHost OpenTelemetry.Instrumentation.As... {1.11.1} ASP.NET Core instrumentation for OpenTelem... XafAspireDemo.ServiceDefaults OpenTelemetry.Exporter.OpenTelem... {1.11.2} OpenTelemetry protocol exporter for OpenTe... XafAspireDemo.ServiceDefaults OpenTelemetry.Instrumentation.Ru... {1.11.1} .NET runtime instrumentation for OpenTelem... XafAspireDemo.ServiceDefaults Microsoft.Extensions.Http.Resili... {9.3.0} Resilience mechanisms for HttpClient. XafAspireDemo.ServiceDefaults Microsoft.Extensions.ServiceDisc... {9.1.0} Provides extensions to HttpClient that ena... XafAspireDemo.ServiceDefaults OpenTelemetry.Extensions.Hosting {1.11.2} Contains extensions to start OpenTelemetry... XafAspireDemo.ServiceDefaults OpenTelemetry.Instrumentation.Http {1.11.1} Http instrumentation for OpenTelemetry .NET. XafAspireDemo.ServiceDefaults
現在運行Update-Package命令,等待所有的包都更新到最新版本。
在此之后還有一個小問題:AppHost項目文件中的Sdk引用仍然指向9.0.0版本:
<Sdk Name="Aspire.AppHost.Sdk" Version="9.0.0" />
將此手動修復到9.1.0版本,因為這是最新的可用版本。
<Sdk Name="Aspire.AppHost.Sdk" Version="9.1.0" />
注意:您可以使用新的.NET Upgrade Assistant Visual Studio Extension來自動更新依賴項,包括SDK版本。
首先,可以簡單地從Module項目中刪除額外的Extensions.cs副本,這是不必要的。
在ServiceDefaults項目中的Extensions.cs中實現的類Extensions可以用下面的代碼完全替換,注意,這個實現包含與原始文件使用的完全相同的默認代碼,不同之處在于如何應用代碼。標準文件在大多數情況下使用IHostApplicationBuilder接口,而替換文件直接使用IServiceCollection,這使得與Blazor應用程序的啟動代碼交互變得容易得多。
public static class Extensions { public static void AddAspireServiceDefaults(this IServiceCollection services) { services.AddMetrics(); services.AddOpenTelemetry(); services.AddHealthChecks().AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); services.AddServiceDiscovery(); services.ConfigureHttpClientDefaults(http => { http.AddStandardResilienceHandler(); http.AddServiceDiscovery(); }); } public static IServiceCollection ConfigureOpenTelemetry( this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment ) { services .AddLogging(logging => { logging.AddOpenTelemetry(options => { options.IncludeFormattedMessage = true; options.IncludeScopes = true; }); }) .AddOpenTelemetry() .WithMetrics(metrics => { metrics .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddRuntimeInstrumentation(); }) .WithTracing(tracing => { tracing .AddSource(environment.ApplicationName) .AddSource("Microsoft.AspNetCore.SignalR.Server") .AddAspNetCoreInstrumentation() // Uncomment the following line to enable gRPC instrumentation //.AddGrpcClientInstrumentation() .AddHttpClientInstrumentation(); }); AddOpenTelemetryExporters(services, configuration); return services; } private static void AddOpenTelemetryExporters( IServiceCollection services, IConfiguration configuration ) { var useOtlpExporter = !string.IsNullOrWhiteSpace( configuration["OTEL_EXPORTER_OTLP_ENDPOINT"] ); if (useOtlpExporter) { services.AddOpenTelemetry().UseOtlpExporter(); } } public static void MapDefaultAspireDevEndpoints(this IEndpointRouteBuilder endpoints) { endpoints.MapHealthChecks("/health"); endpoints.MapHealthChecks( "/alive", new HealthCheckOptions { Predicate = r => r.Tags.Contains("live") } ); } }
與向導創建的原始文件一樣,您應該將此視為一個起點,并根據自己的應用程序系統需要調整擴展方法的代碼。與標準代碼相比,所應用的一個變化是增加了額外的跟蹤源Microsoft.AspNetCore.SignalR.Server,這使得來自SignalR的遙測信息在Aspire儀表板中可用,這是需要根據您自己的需求進行更改的示例。
所有這些更改都應用于Blazor.Server項目中的Startup.cs文件,我們首先擴展構造函數,除了配置之外,還包括對環境對象的引用:
public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment) { Configuration = configuration; WebHostEnvironment = webHostEnvironment; } public IConfiguration Configuration { get; } public IWebHostEnvironment WebHostEnvironment { get; } 就在ConfigureServices方法的開頭,添加了對新擴展方法的調用,這兩個新行在這里有一個-->前綴: public void ConfigureServices(IServiceCollection services) { --> services.AddAspireServiceDefaults(); --> services.ConfigureOpenTelemetry(Configuration, WebHostEnvironment); services.AddSingleton( typeof(Microsoft.AspNetCore.SignalR.HubConnectionHandler<>), typeof(ProxyHubConnectionHandler<>)); ...
在這一點上,我們還應用了一個可選的擴展,在項目中添加了NuGet包OpenTelemetry.Instrumentation.EntityFrameworkCore(這目前是一個預發布版本!),然后用這些額外的代碼行啟用EF Core的instrumentation:
public void ConfigureServices(IServiceCollection services) { services.AddAspireServiceDefaults(); services.ConfigureOpenTelemetry(Configuration, WebHostEnvironment); --> services.ConfigureOpenTelemetryTracerProvider(builder => --> { --> builder.AddEntityFrameworkCoreInstrumentation(); --> }); services.AddSingleton( typeof(Microsoft.AspNetCore.SignalR.HubConnectionHandler<>), typeof(ProxyHubConnectionHandler<>)); ...
最后,對Configure方法做了一個更改。在它的最后添加了一個塊,它使用Aspire向導創建的標準擴展方法有條件地添加端點映射:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseEndpoints(endpoints => { endpoints.MapXafEndpoints(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); endpoints.MapControllers(); }); --> if (env.IsDevelopment()) --> { --> app.UseEndpoints(endpoints => --> { --> endpoints.MapDefaultAspireDevEndpoints(); --> }); --> } }
此時,可以運行應用程序了,Aspire Dashboard在瀏覽器中正確地出現了。然而Blazor項目的資源沒有顯示任何端點,這使得它實際上無法訪問。
AppHost項目中的Program.cs中的代碼現在是應用程序系統的入口點,這是Aspire配置其編排的地方,即使現在只有一個項目需要配置。根據自己的需求修改這段代碼并不罕見,在這種情況下,發現需要一個顯式調用來幫助Aspire理解Blazor應用程序有一個HTTPS端點:
var builder = DistributedApplication.CreateBuilder(args); builder .AddProject<Projects.XafAspireDemo_Blazor_Server>("xafaspiredemo-blazor-server") --> .WithHttpsEndpoint(); builder.Build().Run();
現在,演示應用程序有了一個端點條目,通過它可以像以前一樣訪問應用程序。
在Blazor前端運行一些操作后,Aspire Dashboard也開始在Traces和Metrics面板中顯示條目,您可以在這里深入研究并詳細分析應用程序操作。
更多產品資訊及授權,歡迎來電咨詢:023-68661681
慧都是?家?業數字化解決?案公司,專注于軟件、?油與?業領域,以深?的業務理解和?業經驗,幫助企業實現智能化轉型與持續競爭優勢。
慧都科技是DevExpress的中國區的合作伙伴,DevExpress作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網