Program.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Microsoft.AspNetCore.Components;
  2. using Microsoft.AspNetCore.Components.Web;
  3. using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
  4. using RackPeek.Domain;
  5. using RackPeek.Domain.Persistence;
  6. using RackPeek.Domain.Persistence.Yaml;
  7. using Shared.Rcl;
  8. using YamlDotNet.Serialization;
  9. using YamlDotNet.Serialization.NamingConventions;
  10. namespace RackPeek.Web.Viewer;
  11. public class Program
  12. {
  13. public static async Task Main(string[] args)
  14. {
  15. var builder = WebAssemblyHostBuilder.CreateDefault(args);
  16. builder.RootComponents.Add<App>("#app");
  17. builder.RootComponents.Add<HeadOutlet>("head::after");
  18. var services = builder.Services;
  19. builder.Services.AddScoped(sp =>
  20. {
  21. var nav = sp.GetRequiredService<NavigationManager>();
  22. return new HttpClient
  23. {
  24. BaseAddress = new Uri(nav.BaseUri)
  25. };
  26. });
  27. builder.Services.AddScoped<ITextFileStore, WasmTextFileStore>();
  28. var resources = new ResourceCollection();
  29. builder.Services.AddSingleton(resources);
  30. var yamlDir = builder.Configuration.GetValue<string>("RPK_YAML_DIR") ?? "config";
  31. var yamlFilePath = $"{yamlDir}/config.yaml";
  32. builder.Services.AddScoped<RackPeekConfigMigrationDeserializer>();
  33. builder.Services.AddScoped<IResourceYamlMigrationService, ResourceYamlMigrationService>();
  34. builder.Services.AddScoped<IResourceCollection>(sp =>
  35. new YamlResourceCollection(
  36. yamlFilePath,
  37. sp.GetRequiredService<ITextFileStore>(),
  38. sp.GetRequiredService<ResourceCollection>(),
  39. sp.GetRequiredService<IResourceYamlMigrationService>()));
  40. builder.Services.AddYamlRepos();
  41. builder.Services.AddCommands();
  42. builder.Services.AddScoped<IConsoleEmulator, ConsoleEmulator>();
  43. builder.Services.AddUseCases();
  44. builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
  45. await builder.Build().RunAsync();
  46. }
  47. }