using FluentValidation;
using Mapster;
using Microsoft.Extensions.Configuration;
using NewLife;
using System.IO;
using System.Windows;
using YY.Admin.Core;
using YY.Admin.EventBus;
using YY.Admin.Filter;
using YY.Admin.Module;
using YY.Admin.Properties;
using YY.Admin.Setup;
using YY.Admin.ViewModels;
using YY.Admin.Views;
namespace YY.Admin
{
///
/// Interaction logic for App.xaml
///
public partial class App : PrismApplication
{
private IConfiguration? _configuration;
private ILoggerService? _logger;
private readonly SyncModule _syncModule = new();
protected override Window CreateShell()
{
return Container.Resolve();
}
protected override void OnStartup(StartupEventArgs e)
{
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
// 构建配置
_configuration = new ConfigurationBuilder()
.SetBasePath(baseDirectory)
.AddJsonFile("Configuration/appsettings.json", optional: false, reloadOnChange: true)
.Build();
// 全局配置
TypeAdapterConfig.GlobalSettings.Default
.IgnoreNullValues(true)
.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
// FluentValidation 全局规则级别配置
ValidatorOptions.Global.DefaultRuleLevelCascadeMode = CascadeMode.Stop;
// Mapster 全局配置
#if DEBUG
//TypeAdapterConfig.GlobalSettings.RequireExplicitMapping = true;
#endif
base.OnStartup(e);
}
//注册
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//后续调整为配置依赖注入(Prism Module)
// 注册错误处理
containerRegistry.RegisterSingleton();
//全局错误处理
containerRegistry.RegisterSingleton();
// 注册事件聚合器(Prism自带)
containerRegistry.RegisterSingleton();
//项目配置选项
containerRegistry.AddProjectOptions(_configuration!);
// 注册原始配置,供业务服务读取第三方对接参数
containerRegistry.RegisterInstance(_configuration!);
// 注册缓存服务
containerRegistry.AddNewLifeCache(_configuration!);
//注册数据库服务
containerRegistry.AddDbContext(_configuration!);
//注册通知事件服务
containerRegistry.AddNotificationEventBus();
// 服务注册
containerRegistry.AddService(_configuration!);
// 注册HttpClient连接池
containerRegistry.AddHttpClient();
// 注册断联续传同步模块
_syncModule.RegisterTypes(containerRegistry);
// 注册所有需要导航的视图
containerRegistry.AddNavigation();
}
protected override void OnInitialized()
{
base.OnInitialized();
// 获取日志服务
_logger = Container.Resolve();
// 初始化全局异常处理(通过解析触发构造函数注册)
Container.Resolve();
// 保存默认主题
AppSettings.Default.SkinType = AppSettingsViewModel.GetSkinType().ToInt();
AppSettings.Default.Save();
_logger.Information("应用程序已启动");
// 启动断联续传同步模块
_syncModule.OnInitialized(Container);
}
protected override void OnExit(ExitEventArgs e)
{
BaseViewModel.StopTokenCheckTimer();
base.OnExit(e);
_logger?.Information("应用程序已退出");
}
}
}