我想讓我的 Blazor 應用程式的一頁只能同時運行一次。這意味著當任何用戶開始其功能(它正在我們的資料庫上作業)時,另一個用戶將無法在所有作業完成之前,首先。
有點像鎖定/使用互斥鎖。
uj5u.com熱心網友回復:
對于共享狀態資訊,在 Blazor 中添加具有依賴注入的單例是正常的。 警告這不是經過測驗的代碼,但您可以理解。
創建一個單例類:
public class LockState {
public string UserId { get; set; }
}
在Startup.cs 中注冊
public void ConfigureServices(IServiceCollection services){
// . . .
services.AddSingleton<LockState>();
}
將其注入PageToLock.razor
@inject LockState LS
@inject AuthenticationStateProvider ASP
@if(LS.UserId == this.Userid){
<YourDataBaseControl />
<button @onclick="()=> this.UserId = null">X</button>
}
else {
<div>The Database Control is Currently being used. . . </div>
}
@code {
string UserId;
protected override async Task OnInitializedAsync(){
UserId = (await ASP.GetAuthenticationStateAsync()).User.FindFirst(c => c.Type.Contains("nameidentifier"))?.Value;
if (LS.UserId is null) LS.UserId = this.UserId;
}
}
請注意,有問題。當用戶完成頁面時,他們必須設定LS.UserId為 null 否則它將被永久鎖定。 如果他們忘記了,只需關閉瀏覽器。. . 那會很糟糕。你必須想出一種可靠的方法來保證鎖被移除。您可以添加計時器來檢查電路是否仍然打開,并且可能應該有一個事件,以便PageToLock.razor知道鎖何時被移除。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335994.html
