using AuroraDesk.Core.Interfaces; using AuroraDesk.Presentation.ViewModels; using AuroraDesk.Presentation.ViewModels.Pages; using AuroraDesk.Presentation.Services; using Microsoft.Extensions.DependencyInjection; using ReactiveUI; namespace AuroraDesk.Presentation.Extensions; /// /// 服务集合扩展方法(表示层) /// public static class ServiceCollectionExtensions { /// /// 添加 ReactiveUI 相关服务 /// /// 服务集合 /// 服务集合 public static IServiceCollection AddReactiveUI(this IServiceCollection services) { // 注册 ReactiveUI 相关服务 services.AddSingleton(); services.AddSingleton(provider => provider.GetRequiredService()); return services; } /// /// 添加 ViewModel 服务 /// /// 服务集合 /// 服务集合 public static IServiceCollection AddViewModels(this IServiceCollection services) { // 注册 PageViewModelFactory(实现 Core 层接口) services.AddTransient(); // 注册所有 PageViewModel 为 Transient services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); // 注意:MainWindowViewModel 的注册移到主项目的 App.axaml.cs 中 // 因为它依赖 AppViewModel,而 AppViewModel 在 AddReactiveUI() 中注册 // 必须在 AddReactiveUI() 之后注册 MainWindowViewModel return services; } }