257 lines
11 KiB
C#
257 lines
11 KiB
C#
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");
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|