Program.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 DocMigrator.Yaml;
  9. using YamlDotNet.Serialization;
  10. using YamlDotNet.Serialization.NamingConventions;
  11. namespace RackPeek.Web.Viewer;
  12. public class Program
  13. {
  14. public static async Task Main(string[] args)
  15. {
  16. var builder = WebAssemblyHostBuilder.CreateDefault(args);
  17. builder.RootComponents.Add<App>("#app");
  18. builder.RootComponents.Add<HeadOutlet>("head::after");
  19. var services = builder.Services;
  20. builder.Services.AddScoped(sp =>
  21. {
  22. var nav = sp.GetRequiredService<NavigationManager>();
  23. return new HttpClient
  24. {
  25. BaseAddress = new Uri(nav.BaseUri)
  26. };
  27. });
  28. builder.Services.AddScoped<ITextFileStore, WasmTextFileStore>();
  29. var resources = new ResourceCollection();
  30. builder.Services.AddSingleton(resources);
  31. builder.Services.AddSingleton<RackPeekConfigMigrationDeserializer>(sp =>
  32. {
  33. var logger = sp.GetRequiredService<ILogger<YamlMigrationDeserializer<YamlRoot>>>();
  34. // TODO: Add options
  35. var deserializerBuilder = new DeserializerBuilder()
  36. .WithNamingConvention(CamelCaseNamingConvention.Instance)
  37. .IgnoreUnmatchedProperties();
  38. var serializerBuilder = new SerializerBuilder()
  39. .WithNamingConvention(CamelCaseNamingConvention.Instance);
  40. return new RackPeekConfigMigrationDeserializer(
  41. sp,
  42. logger,
  43. deserializerBuilder,
  44. serializerBuilder);
  45. });
  46. var yamlDir = builder.Configuration.GetValue<string>("RPK_YAML_DIR") ?? "config";
  47. var yamlFilePath = $"{yamlDir}/config.yaml";
  48. builder.Services.AddScoped<IResourceCollection>(sp =>
  49. new YamlResourceCollection(
  50. yamlFilePath,
  51. sp.GetRequiredService<ITextFileStore>(),
  52. sp.GetRequiredService<ResourceCollection>(),
  53. sp.GetRequiredService<RackPeekConfigMigrationDeserializer>()));
  54. builder.Services.AddYamlRepos();
  55. builder.Services.AddCommands();
  56. builder.Services.AddScoped<IConsoleEmulator, ConsoleEmulator>();
  57. builder.Services.AddUseCases();
  58. builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
  59. await builder.Build().RunAsync();
  60. }
  61. }