using System; using Microsoft.Extensions.Logging; using AuroraDesk.Core.Interfaces; using ReactiveUI; using Microsoft.Extensions.DependencyInjection; namespace AuroraDesk.Presentation.ViewModels; /// /// 应用程序级别的 ViewModel,实现 IScreen 接口 /// public class AppViewModel : ReactiveObject, IScreen { public RoutingState Router { get; } private MainWindowViewModel? _mainWindowViewModel; private readonly IServiceProvider _serviceProvider; /// /// MainWindowViewModel 的延迟初始化属性 /// 重构后:通过依赖注入获取,而不是直接 new,这样可以正确注入所有依赖 /// public MainWindowViewModel MainWindowViewModel { get { if (_mainWindowViewModel == null) { // 通过依赖注入获取 MainWindowViewModel,确保所有依赖(INavigationStateService, ITabManagementService)正确注入 // 传入 this 作为 IScreen 参数 _mainWindowViewModel = ActivatorUtilities.CreateInstance( _serviceProvider, this); } return _mainWindowViewModel; } } public AppViewModel(IServiceProvider serviceProvider) { Router = new RoutingState(); _serviceProvider = serviceProvider; // 注意:MainWindowViewModel 延迟创建,避免循环依赖 // MainWindowViewModel 将在首次访问时创建 } }