Files
YuPu-OrpaonEMS/OrpaonEMS.App/App.xaml.cs
2025-12-25 11:13:13 +08:00

257 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Example;
using FreeSql;
using OrpaonEMS.App.Services;
using OrpaonEMS.App.CANDrive;
using OrpaonEMS.App.ViewModels;
using OrpaonEMS.App.Views;
using OrpaonEMS.Core;
using OrpaonEMS.Model;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace OrpaonEMS.App
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{
public App()
{
try
{
//24.2.7
//Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true;
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MzEyMzM3NkAzMjM0MmUzMDJlMzBHdjVKNUNpNWZxYXQwR05ZbVYvUEtzbGxXMnVxRjYvRGtLSlZUOGpjQW44PQ==");
//e0397905-7455-4533-8c7a-3ec89b68b2a7
// 授权 a717c797-59e3-48de-b6b4-574a4e03dc79
if (!HslCommunication.Authorization.SetAuthorizationCode("e0397905-7455-4533-8c7a-3ec89b68b2a7"))
{
//active failed
MessageBox.Show("授权失败当前程序只能使用8小时");
return;
}
else
{
//IsActive = true;
}
//SfSkinManager.ApplyStylesOnApplication = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//string DataDirectory = AppDomain.CurrentDomain.BaseDirectory + @"Db\ems.db";//应用程序内部的Db信息
string DataDirectory = @"C:\Db\ems.db";//直接的路径信息
/// <summary>
/// 注册服务
/// </summary>
private EnergyStorageService energyStorageService { get; set; }
protected override Window CreateShell()
{
var container = ContainerLocator.Container;
var shell = container.Resolve<object>("MainWindow");
return shell as Window;
}
protected override void RegisterTypes(IContainerRegistry services)
{
//注册日志服务
services.RegisterSingleton<ILogService, LogService>();
//注册设备服务
services.RegisterSingleton<BmsDataService>();
services.RegisterSingleton<InPowerPCSDataService>();
services.RegisterSingleton<ACService>();
services.RegisterSingleton<FFService>();
services.RegisterSingleton<EnergyStorageService>();
services.RegisterSingleton<EMSService>();
services.RegisterSingleton<AcrelMeterDataService>();
services.RegisterSingleton<MqttDataClientService>();
services.RegisterSingleton<SolarEnergyService>();
services.RegisterSingleton<ConfigDataService>();
services.RegisterSingleton<PwAnalyzeService>();
services.RegisterSingleton<EsDataLogService>();
services.RegisterSingleton<YuePuRunModelService>();
services.RegisterSingleton<YuPuPwAnalyzeService>();
var Con = OrpaonEMS.Core.ConfigHelper.GetValue("connecting5").Replace("@Address@", DataDirectory);
//var Con = OrpaonEMS.Core.ConfigHelper.GetValue("connecting").Replace("@Address@", DataDirectory);
// Data Source=C:\Db\ems.db; Attachs=ems.db; Pooling=true;Min Pool Size=1
//注册IFreeSql实例 单例
services.RegisterSingleton<IFreeSql>(() =>
{
IFreeSql Fsql = new FreeSqlBuilder()
//.UseConnectionString(DataType.SqlServer, "Data Source=CT-PC;user instance=false;Initial Catalog=KylinEMS;Encrypt=True;TrustServerCertificate=True;User ID=sa;Password=12345678")
.UseConnectionString(FreeSql.DataType.Sqlite, Con)
.UseAutoSyncStructure(true)
.Build();
return Fsql;
});
services.RegisterSingleton<INavigationMenuService, NavigationMenuService>();
services.RegisterForNavigation<MainWindow, MainViewModel>();
services.RegisterForNavigation<ProcesView, ProcesViewModel>();
services.RegisterForNavigation<DashBoardView, DashBoardViewModel>();
services.RegisterForNavigation<PcsView, PcsViewModel>();
services.RegisterForNavigation<BmsView, BmsViewModel>();
services.RegisterForNavigation<ACView, ACViewModel>();
services.RegisterForNavigation<FFView, FFViewModel>();
services.RegisterForNavigation<SysConfigView, SysConfigViewModel>();
services.RegisterForNavigation<ControlConfigView, ControlConfigViewModel>();
services.RegisterForNavigation<YuPuHandView, YuPuHandViewModel>();
services.RegisterForNavigation<AutoHandView, AutoHandViewModel>();
services.RegisterForNavigation<YuPuDashBoardView, YuPuDashBoardViewModel>();
//services.RegisterForNavigation<ProConfigView, ProConfigViewModel>();
services.RegisterDialog<DialogBmsConfigView, DialogBmsConfigViewModel>();
services.RegisterDialog<TimeConfigView, TimeConfigViewModel>();
services.RegisterDialog<DataLogView, DataLogViewModel>();
services.RegisterDialog<YuPuReportView, YuPuReportViewModel>();
}
/// <summary>
/// 系统初始化
/// </summary>
protected override async void OnInitialized()
{
//从容器中获取MainView的实例对象
var container = ContainerLocator.Container;
var view = Application.Current.MainWindow as Window;
if (view != null)
{
//更新Prism注册区域信息
var regionManager = container.Resolve<IRegionManager>();
RegionManager.SetRegionManager(view, regionManager);
RegionManager.UpdateRegions();
regionManager.RegisterViewWithRegion("UserDefineContentRegion", "YuPuHandView");
//调用首页的INavigationAware 接口做一个初始化操作
if (view.DataContext is INavigationAware navigationAware)
{
navigationAware.OnNavigatedTo(null);
//呈现首页
App.Current.MainWindow = view;
}
}
//var appVersion1 = ContainerLocator.Container.Resolve<BmsViewModel>();
//先加载服务防止在ViewModel中使用时速度慢
var appVersionService = ContainerLocator.Container.Resolve<IFreeSql>();
var appVersionService1 = ContainerLocator.Container.Resolve<BmsDataService>();
var appVersionService2 = ContainerLocator.Container.Resolve<ILogService>();
var appVersionService8 = ContainerLocator.Container.Resolve<ConfigDataService>();
var appVersionService14 = ContainerLocator.Container.Resolve<YuePuRunModelService>();
var appVersionService3 = ContainerLocator.Container.Resolve<InPowerPCSDataService>();
//var appVersionService4 = ContainerLocator.Container.Resolve<ACService>();
var appVersionService5 = ContainerLocator.Container.Resolve<FFService>();
energyStorageService = ContainerLocator.Container.Resolve<EnergyStorageService>();
var appVersionService7 = ContainerLocator.Container.Resolve<AcrelMeterDataService>();
var appVersionService9 = ContainerLocator.Container.Resolve<EMSService>();
var appVersionService10 = ContainerLocator.Container.Resolve<SolarEnergyService>();
var appVersionService11 = ContainerLocator.Container.Resolve<MqttDataClientService>();
var appVersionService12 = ContainerLocator.Container.Resolve<PwAnalyzeService>();
var appVersionService13 = ContainerLocator.Container.Resolve<EsDataLogService>();
var appVersionService16 = ContainerLocator.Container.Resolve<YuPuPwAnalyzeService>();
var dd = appVersionService.Select<HourData>().ToList();
await PreloadPDashBoardViews();
await PreloadBmsViews();
//await PreloadPcsViews();
//var dd = appVersionService.Select<HourData>().ToList();
base.OnInitialized();
}
protected override void OnExit(ExitEventArgs e)
{
ContainerLocator.Container.Resolve<YuePuRunModelService>().ThreadEnable = false;
ContainerLocator.Container.Resolve<EnergyStorageService>().WebSocketThreadEnable = false;
ContainerLocator.Container.Resolve<EMSService>().ThreadEnable = false;
// 确保停止 CAN 接收线程,避免前台线程阻塞进程退出
CAN.Stop();
energyStorageService.EnergyStorageStateMachine.Fire(Core.Enums.EnergyStorageStateTrig.HandTrig);
base.OnExit(e);
}
private async Task PreloadBmsViews()
{
// 预加载视图
await Application.Current.Dispatcher.InvokeAsync(() =>
{
var container = ContainerLocator.Container;
// 在主 UI 线程上预加载视图
var region = container.Resolve<IRegionManager>().Regions["MainViewContentRegion"];
var view = region.GetView("BmsView");
if (view == null)
{
view = new BmsView(); // 实例化视图
region.Add(view, "BmsView");
}
});
}
private async Task PreloadPcsViews()
{
// 预加载视图
await Application.Current.Dispatcher.InvokeAsync(() =>
{
var container = ContainerLocator.Container;
// 在主 UI 线程上预加载视图
var region = container.Resolve<IRegionManager>().Regions["MainViewContentRegion"];
var view = region.GetView("PcsView");
if (view == null)
{
view = new PcsView(); // 实例化视图
region.Add(view, "PcsView");
}
});
}
private async Task PreloadPDashBoardViews()
{
// 预加载视图
await Application.Current.Dispatcher.InvokeAsync(() =>
{
var container = ContainerLocator.Container;
// 在主 UI 线程上预加载视图
var region = container.Resolve<IRegionManager>().Regions["MainViewContentRegion"];
var view = region.GetView("DashBoardView");
if (view == null)
{
view = new DashBoardView(); // 实例化视图
region.Add(view, "DashBoardView");
}
});
}
}
}