| | | 1 | | // ----------------------------------------------------------------------- |
| | | 2 | | // <copyright file="ServiceCollectionExtensions.cs" company="Stéphane ANDRE"> |
| | | 3 | | // Copyright (c) Stéphane ANDRE. All rights reserved. |
| | | 4 | | // </copyright> |
| | | 5 | | // ----------------------------------------------------------------------- |
| | | 6 | | |
| | | 7 | | using System.Collections.Generic; |
| | | 8 | | using System.Globalization; |
| | | 9 | | using Microsoft.Extensions.DependencyInjection; |
| | | 10 | | using Microsoft.Extensions.DependencyInjection.Extensions; |
| | | 11 | | using MyNet.Globalization.Culture; |
| | | 12 | | using MyNet.UI.Commands; |
| | | 13 | | using MyNet.UI.Dialogs.ContentDialogs; |
| | | 14 | | using MyNet.UI.Loading; |
| | | 15 | | using MyNet.UI.Services; |
| | | 16 | | using MyNet.UI.ViewModels.Preferences; |
| | | 17 | | using MyNet.UI.ViewModels.Shell; |
| | | 18 | | using MyNet.UI.ViewModels.Shell.About; |
| | | 19 | | using MyNet.UI.ViewModels.Shell.Chrome; |
| | | 20 | | using MyNet.UI.ViewModels.Shell.Drawers; |
| | | 21 | | using MyNet.UI.ViewModels.Shell.FileMenu; |
| | | 22 | | using MyNet.UI.ViewModels.Shell.Host; |
| | | 23 | | using MyNet.UI.ViewModels.Shell.Notifications; |
| | | 24 | | using MyNet.UI.ViewModels.Shell.Services; |
| | | 25 | | using MyNet.UI.ViewModels.Shell.Startup; |
| | | 26 | | using MyNet.UI.ViewModels.Shell.Taskbar; |
| | | 27 | | |
| | | 28 | | #pragma warning disable IDE0130 |
| | | 29 | | namespace MyNet.UI.ViewModels; |
| | | 30 | | #pragma warning restore IDE0130 |
| | | 31 | | |
| | | 32 | | /// <summary> |
| | | 33 | | /// DI registration helpers for view models. |
| | | 34 | | /// </summary> |
| | | 35 | | public static class ServiceCollectionExtensions |
| | | 36 | | { |
| | | 37 | | extension(IServiceCollection services) |
| | | 38 | | { |
| | | 39 | | /// <summary> |
| | | 40 | | /// Registers shell services and panel view models. |
| | | 41 | | /// Call after <c>AddDialogs()</c> so <see cref="ShellDrawerCoordinator"/> can subscribe to content dialog event |
| | | 42 | | /// Register <see cref="ShellHostViewModel"/> in the host application (pass <see cref="FileMenuViewModel"/> when |
| | | 43 | | /// </summary> |
| | | 44 | | public IServiceCollection AddShell(IEnumerable<CultureInfo>? supportedCultures = null) |
| | | 45 | | { |
| | 6 | 46 | | services.TryAddSingleton<IApplicationInfo, ApplicationInfo>(); |
| | 6 | 47 | | services.TryAddSingleton<IShellHostProvider, ShellHostProvider>(); |
| | 6 | 48 | | services.TryAddSingleton<ShellService>(); |
| | 6 | 49 | | services.TryAddSingleton<IShellService>(static sp => sp.GetRequiredService<ShellService>()); |
| | 6 | 50 | | services.TryAddSingleton<IShellDrawerService>(static sp => sp.GetRequiredService<ShellService>()); |
| | 6 | 51 | | services.TryAddSingleton<IShellFileMenuService>(static sp => sp.GetRequiredService<ShellService>()); |
| | 6 | 52 | | services.TryAddSingleton<IFileMenuViewModelFactory, FileMenuViewModelFactory>(); |
| | | 53 | | |
| | 6 | 54 | | services.TryAddTransient<ShellNotificationsViewModel>(); |
| | 6 | 55 | | services.TryAddTransient(sp => new ShellCultureViewModel(sp.GetRequiredService<ICultureService>(), sp.GetSer |
| | 6 | 56 | | services.TryAddTransient<ShellThemeViewModel>(); |
| | 6 | 57 | | services.TryAddTransient<SplashScreenViewModel>(); |
| | 6 | 58 | | services.TryAddTransient<AboutViewModel>(); |
| | | 59 | | |
| | 6 | 60 | | services.TryAddSingleton<ITaskbarProgressSource, TaskbarProgressSource>(); |
| | 6 | 61 | | services.TryAddSingleton<BusyTaskbarCoordinator>(static sp => |
| | 6 | 62 | | new( |
| | 6 | 63 | | sp.GetRequiredService<IBusyService>(), |
| | 6 | 64 | | sp.GetRequiredService<ITaskbarProgressSource>())); |
| | | 65 | | |
| | 6 | 66 | | services.TryAddSingleton<ShellNotificationsDrawerCoordinator>(); |
| | 6 | 67 | | services.TryAddSingleton<ShellDrawerCoordinator>(static sp => |
| | 6 | 68 | | { |
| | 6 | 69 | | _ = sp.GetRequiredService<IShellHostProvider>(); |
| | 6 | 70 | | return new( |
| | 6 | 71 | | sp.GetRequiredService<IContentDialogService>(), |
| | 6 | 72 | | sp.GetRequiredService<IShellHostProvider>()); |
| | 6 | 73 | | }); |
| | | 74 | | |
| | 6 | 75 | | return services; |
| | | 76 | | } |
| | | 77 | | |
| | | 78 | | /// <summary> |
| | | 79 | | /// Registers preferences page view models used by the shell preferences workspace. |
| | | 80 | | /// Register <see cref="PreferencesViewModel"/> in the host with the desired page list. |
| | | 81 | | /// </summary> |
| | | 82 | | public IServiceCollection AddShellPreferences() |
| | | 83 | | { |
| | 3 | 84 | | services.TryAddTransient<DisplayPreferencesViewModel>(); |
| | 3 | 85 | | services.TryAddTransient<TimeAndLanguagePreferencesViewModel>(); |
| | 3 | 86 | | return services; |
| | | 87 | | } |
| | | 88 | | } |
| | | 89 | | } |
| | | 90 | | |