You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
using System;
|
|
using Microsoft.Extensions.Logging;
|
|
using AuroraDesk.Core.Interfaces;
|
|
using ReactiveUI;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace AuroraDesk.Presentation.ViewModels;
|
|
|
|
/// <summary>
|
|
/// 应用程序级别的 ViewModel,实现 IScreen 接口
|
|
/// </summary>
|
|
public class AppViewModel : ReactiveObject, IScreen
|
|
{
|
|
public RoutingState Router { get; }
|
|
|
|
private MainWindowViewModel? _mainWindowViewModel;
|
|
private readonly IServiceProvider _serviceProvider;
|
|
|
|
/// <summary>
|
|
/// MainWindowViewModel 的延迟初始化属性
|
|
/// 重构后:通过依赖注入获取,而不是直接 new,这样可以正确注入所有依赖
|
|
/// </summary>
|
|
public MainWindowViewModel MainWindowViewModel
|
|
{
|
|
get
|
|
{
|
|
if (_mainWindowViewModel == null)
|
|
{
|
|
// 通过依赖注入获取 MainWindowViewModel,确保所有依赖(INavigationStateService, ITabManagementService)正确注入
|
|
// 传入 this 作为 IScreen 参数
|
|
_mainWindowViewModel = ActivatorUtilities.CreateInstance<MainWindowViewModel>(
|
|
_serviceProvider,
|
|
this);
|
|
}
|
|
return _mainWindowViewModel;
|
|
}
|
|
}
|
|
|
|
public AppViewModel(IServiceProvider serviceProvider)
|
|
{
|
|
Router = new RoutingState();
|
|
_serviceProvider = serviceProvider;
|
|
// 注意:MainWindowViewModel 延迟创建,避免循环依赖
|
|
// MainWindowViewModel 将在首次访问时创建
|
|
}
|
|
}
|
|
|