如何创建封装为NuGet包的.NET Blazor服务及集成使用?
将Blazor服务封装为NuGet包并提供友好DI注册接口的步骤
Blazor的服务生命周期管理很简单,在Program.cs里调用Services.AddSingleton<*你的类*>()、Services.AddTransient<*你的类*>()或Services.AddScoped<*你的类*>(),就能把类注册成DI可访问的服务。但如果要把复杂功能封装成NuGet包,同时给Blazor提供友好的服务注册接口,可按以下步骤操作:
一、创建NuGet包的类库项目
- 新建一个与Blazor项目同框架版本的.NET类库项目(例如.NET 8)
- 将需要封装的功能类、相关接口全部移入该类库中,比如示例中的
NugetPackage_1_serviceClass、NugetPackage_2_serviceClass等
二、封装友好的服务注册扩展方法
为了让使用者无需手动逐个注册服务,我们可以给IServiceCollection编写扩展方法,把所有服务注册逻辑封装起来:
using Microsoft.Extensions.DependencyInjection; using SomeNuGetPackage_1; using SomeNuGetPackage_2; using SomeNuGetPackage_3; namespace YourNuGetPackageName { public static class ServiceCollectionExtensions { // 对外提供的友好注册入口 public static IServiceCollection AddYourNuGetServices(this IServiceCollection services) { // 内部统一处理所有服务的生命周期注册 services.AddSingleton<NugetPackage_1_serviceClass>(); services.AddTransient<NugetPackage_2_serviceClass>(); services.AddScoped<NugetPackage_3_serviceClass>(); // 若需要支持配置参数,可重载该方法接收配置对象 return services; } } }
三、打包生成NuGet包
- 打开类库项目属性,配置包的元数据(包ID、版本号、作者描述等)
- 右键项目选择「打包」,或使用命令行执行:
dotnet pack - 生成的
.nupkg文件会存放在项目的bin/Release(或Debug)目录下
四、在Blazor项目中使用NuGet包
- 安装该NuGet包(可本地安装生成的
.nupkg,或发布到NuGet源后在线安装) - 在Program.cs中只需调用一行扩展方法,即可完成所有服务的注册:
using YourNuGetPackageName; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); // 一键注册NuGet包内的所有服务 builder.Services.AddYourNuGetServices(); var app = builder.Build(); // HTTP请求管道配置保持不变 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
内容的提问来源于stack exchange,提问作者Mike Armstrong
相关产品推荐
相关产品推荐

