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
{
///
/// Interaction logic for App.xaml
///
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";//直接的路径信息
///
/// 注册服务
///
private EnergyStorageService energyStorageService { get; set; }
protected override Window CreateShell()
{
var container = ContainerLocator.Container;
var shell = container.Resolve("MainWindow");
return shell as Window;
}
protected override void RegisterTypes(IContainerRegistry services)
{
//注册日志服务
services.RegisterSingleton();
//注册设备服务
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
services.RegisterSingleton();
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 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();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
services.RegisterForNavigation();
//services.RegisterForNavigation();
services.RegisterDialog();
services.RegisterDialog();
services.RegisterDialog();
services.RegisterDialog();
}
///
/// 系统初始化
///
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();
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();
//先加载服务,防止在ViewModel中使用时速度慢
var appVersionService = ContainerLocator.Container.Resolve();
var appVersionService1 = ContainerLocator.Container.Resolve();
var appVersionService2 = ContainerLocator.Container.Resolve();
var appVersionService8 = ContainerLocator.Container.Resolve();
var appVersionService14 = ContainerLocator.Container.Resolve();
var appVersionService3 = ContainerLocator.Container.Resolve();
//var appVersionService4 = ContainerLocator.Container.Resolve();
var appVersionService5 = ContainerLocator.Container.Resolve();
energyStorageService = ContainerLocator.Container.Resolve();
var appVersionService7 = ContainerLocator.Container.Resolve();
var appVersionService9 = ContainerLocator.Container.Resolve();
var appVersionService10 = ContainerLocator.Container.Resolve();
var appVersionService11 = ContainerLocator.Container.Resolve();
var appVersionService12 = ContainerLocator.Container.Resolve();
var appVersionService13 = ContainerLocator.Container.Resolve();
var appVersionService16 = ContainerLocator.Container.Resolve();
var dd = appVersionService.Select().ToList();
await PreloadPDashBoardViews();
await PreloadBmsViews();
//await PreloadPcsViews();
//var dd = appVersionService.Select().ToList();
base.OnInitialized();
}
protected override void OnExit(ExitEventArgs e)
{
ContainerLocator.Container.Resolve().ThreadEnable = false;
ContainerLocator.Container.Resolve().WebSocketThreadEnable = false;
ContainerLocator.Container.Resolve().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().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().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().Regions["MainViewContentRegion"];
var view = region.GetView("DashBoardView");
if (view == null)
{
view = new DashBoardView(); // 实例化视图
region.Add(view, "DashBoardView");
}
});
}
}
}