我正在嘗試設定一個 Blazor 專案,以便在許多其他專案中重復使用,但我在理解 Blazor 的 DI 系統如何與 NuGet 包配合使用時遇到了問題。
簡而言之,我構建了一個簡單的 Blazor 應用程式作為錯誤報告/請求的票務系統。它通過輸入表單(作為組件構建)收集簡單資訊,并通過物體框架和連接字串(存盤在 AppSettings.JSON 中)將票證上傳到 SQL Server 資料庫。DbContext 通過 AddDbContextFactory 注入票務應用程式的 DI 系統。這一切都在解決方案中完美運行。
我的目標是:我想打包這個票務系統,并以最少的設定在我的其他應用程式中重復使用它。在其他應用程式中,我想重用“AddTicket”組件,它只會接受一些簡單的報告資料并更新票務資料庫。
作為測驗,我將票務應用程式打包為本地機器上的 NuGet 包。我將它匯入到一個單獨的主機應用程式中。但是,我必須在主機應用程式中重新創建連接字串和依賴項注入(使用背景關系工廠和所有內容)才能使包正常作業。
我的問題是,當我構建自己的 NuGet 包時,我不了解 Blazor 的 DI 系統是如何作業的,而且我不了解 Startup.cs 中的依賴項注入流程與 NuGet 包中的內容。
我只是一個簡單的、可重用的表單和提交組件,所有的 EF 和資料庫邏輯都以最簡單的方式內置到其中,我可以放入十幾個外部專案。
構建 NuGet 包的最佳方法是什么,這樣我就不需要在這種情況下進行額外的依賴注入?如果我必須在宿主應用程式的 DI 系統中進行額外的輸入,我該如何使其盡可能簡單?
uj5u.com熱心網友回復:
當我創建一個具有注入功能的庫時。在我的庫中,我創建了一個靜態類并為IServiceCollection
public static class ServiceCollectionExtensions
{
public static void AddBlazorSyncServer(this IServiceCollection services)
{
services.AddScoped<ILogger, Logger<LoggingBroker>>();
services.AddScoped<ILoggingBroker, LoggingBroker>();
services.AddScoped<IDateTimeBroker, DateTimeBroker>();
services.AddTransient<ISyncDatabaseBroker, SyncDatabaseBroker>();
...
}
}
注意:在我的例子中SyncDatabaseBroker是一個DbContext:
public partial class SyncDatabaseBroker : DbContext, ISyncDatabaseBroker
這使得用戶在他們的代碼庫中設定更容易。必須以稍微不同的方式處理資料庫。當我想管理遷移或共享連接字串時,我使用這種方法:
Program.cs (圖書館消費服務器)
...
var migrationsAssembly = typeof(Program).Assembly.FullName;
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseSqlServer(
connectionString,
dbOpts => dbOpts.MigrationsAssembly(migrationsAssembly)));
builder.Services.AddDbContext<SyncDatabaseBroker>(
options => options.UseSqlServer(
connectionString,
dbOpts => dbOpts.MigrationsAssembly(migrationsAssembly)));
...
builder.Services.AddBlazorSyncServer();
然后我可以用于遷移的控制臺命令:
Add-Migration InitialApplicationSchema -Context ApplicationDbContext -OutputDir Data/Migrations/Application
Add-Migration InitialSyncSchema -Context SyncDatabaseBroker -OutputDir Data/Migrations/Sync
Update-Database -Context ApplicationDbContext
Update-Database -Context SyncDatabaseBroker
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339817.html
