From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。
---
HotelPms.Client.Blazor/Program.cs | 98 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 98 insertions(+), 0 deletions(-)
diff --git a/HotelPms.Client.Blazor/Program.cs b/HotelPms.Client.Blazor/Program.cs
new file mode 100644
index 0000000..647a39c
--- /dev/null
+++ b/HotelPms.Client.Blazor/Program.cs
@@ -0,0 +1,98 @@
+using Blazored.LocalStorage;
+using Grpc.Core;
+using Grpc.Net.Client;
+using Grpc.Net.Client.Web;
+using HotelPms.Client.Blazor;
+using HotelPms.Client.Blazor.Services;
+using HotelPms.Client.Blazor.Util;
+using Microsoft.AspNetCore.Components;
+using Microsoft.AspNetCore.Components.Authorization;
+using Microsoft.AspNetCore.Components.Web;
+using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+using MudBlazor;
+using MudBlazor.Services;
+
+
+AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+
+static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+{
+ EnvironmentSetting.Debug("CurrentDomain_UnhandledException");
+}
+
+var builder = WebAssemblyHostBuilder.CreateDefault(args);
+builder.RootComponents.Add<App>("#app");
+builder.RootComponents.Add<HeadOutlet>("head::after");
+
+builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
+builder.Services.AddMudServices(config =>
+{
+ config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.TopCenter;
+
+ config.SnackbarConfiguration.PreventDuplicates = false;
+ config.SnackbarConfiguration.NewestOnTop = false;
+ config.SnackbarConfiguration.ShowCloseIcon = true;
+ config.SnackbarConfiguration.VisibleStateDuration = 10000;
+ config.SnackbarConfiguration.HideTransitionDuration = 500;
+ config.SnackbarConfiguration.ShowTransitionDuration = 500;
+ config.SnackbarConfiguration.SnackbarVariant = Variant.Filled;
+});
+builder.Services.AddBlazoredLocalStorage();
+builder.Services.AddSingleton<IGlobalLoadingSpinner, DefaultGlobalLoadingSpinner>();
+builder.Services.AddAuthorizationCore();
+builder.Services.AddScoped<AuthenticationStateProvider, ApiAuthenticationStateProvider>();
+builder.Services.AddScoped<IAuthService, AuthService>();
+
+EnvironmentSetting.IsDevelopment = builder.HostEnvironment.IsDevelopment();
+EnvironmentSetting.Init(builder.Configuration);
+EnvironmentSetting.ServiceCollection = builder.Services;
+
+builder.Services.AddSingleton(services =>
+{
+ if (EnvironmentSetting.BackendUrl.Length == 0)
+ {
+ var navigationManager = services.GetRequiredService<NavigationManager>();
+ EnvironmentSetting.BackendUrl = navigationManager.BaseUri;
+ }
+
+ var loadingSpinner = services.GetService<IGlobalLoadingSpinner>();
+ var handler = new GrpcSubDirHandler(new HttpClientHandler(), loadingSpinner, EnvironmentSetting.SubDir);
+ GrpcWebHandler httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, handler); //Base64
+ //GrpcWebHandler httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWeb, handler);
+
+ //拦截器(当grpc客户端每次发起请求会通过这里获取http头信息,可以再里面判定过期)
+ var credentials = CallCredentials.FromInterceptor((context, metadata) =>
+ {
+ if (!string.IsNullOrEmpty(ApiAuthenticationStateProvider.AccessToken))
+ {
+ EnvironmentSetting.Debug($"CallCredentials.FromInterceptor:Bearer {ApiAuthenticationStateProvider.AccessToken}");
+ metadata.Add("Authorization", $"Bearer {ApiAuthenticationStateProvider.AccessToken}");
+ }
+ return Task.CompletedTask;
+ });
+
+
+ GrpcChannel channel = GrpcChannel.ForAddress(EnvironmentSetting.BackendUrl, new GrpcChannelOptions
+ {
+ HttpHandler = httpHandler,
+ Credentials = ChannelCredentials.Create(new SslCredentials(), credentials)
+ });
+
+ //using Grpc.Core.Interceptors; //必须引入
+
+ //var channel = GrpcChannel.ForAddress("https://localhost:5001");
+ //// 完整写法
+ //var invoker = channel.CreateCallInvoker().Intercept(new GRPCClientLoggingInterceptor());
+ //var client = new Greeter.GreeterClient(invoker);
+ //await client.SayHelloAsync(new HelloRequest() { Name = "长安书小妆" });
+
+ EnvironmentSetting.GrpcChannel = channel;
+ return channel;
+});
+
+builder.Services.AddJsInputCore();
+
+var host = builder.Build();
+EnvironmentSetting.ServiceProvider = host.Services;
+await host.RunAsync();
+//await builder.Build().RunAsync();
--
Gitblit v1.10.0