using Common; using ACP.ViewModels; using ACP.ViewModels.Dialogs; using ACP.Views; using ACP.Views; using ACP.Views.Dialogs; using Logger; using Notifications.Wpf.Core; using ORM; using Service.Implement; using Service.Interface; using System.Configuration; using System.Data; using System.Reflection; using System.Windows; using UIShare.PubEvent; using static System.Runtime.InteropServices.JavaScript.JSType; using UIShare.GlobalVariable; using UIShare; using System; using DeviceCommand.Devices; using DeviceCommand.Base; using AutoMapper; using Microsoft.Extensions.Logging.Abstractions; using ACP.Profiles; using UIShare.Helpers; namespace ACP { /// /// Interaction logic for App.xaml /// public partial class App : PrismApplication { protected override Window CreateShell() { //UI线程未捕获异常处理事件 this.DispatcherUnhandledException += OnDispatcherUnhandledException; //Task线程内未捕获异常处理事件 TaskScheduler.UnobservedTaskException += OnUnobservedTaskException; ////多线程异常 AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; return Container.Resolve(); } private void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { LoggerHelper.Error(e.Exception.Message, e.Exception.StackTrace); } private void OnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { LoggerHelper.Error(e.Exception.Message, e.Exception.StackTrace); } private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { //记录dump文件 Exception ex = e.ExceptionObject as Exception; MiniDump.TryDump($"dumps\\Error_{DateTime.Now:yyyy-MM-dd HH-mm-ss-ms}.dmp", MiniDump.Option.WithFullMemory, ex); } protected override void OnInitialized() { // 配置全局日志分发器:按 CurrentScope 路由到对应 LogArea var globalInfo = Container.Resolve(); LoggerHelper.Progress = new ScopeLogDispatcher(globalInfo); //初始化数据库 DatabaseConfig.SetTenant(10001); DatabaseConfig.InitSqlite(); DatabaseConfig.CreateDatabaseAndCheckConnection(createDatabase: true, checkConnection: true); SqlSugarContext.InitDatabase(); //显示登录窗口 var login = Container.Resolve(); var re = Container.Resolve(); RegionManager.SetRegionManager(login, re); RegionManager.SetRegionManager(Application.Current.MainWindow, re); login.Show(); } protected override void OnStartup(StartupEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { base.OnStartup(e); return; } string myMachineCode = MachineCodeHelper.GetDeviceMachineCode(); if (MachineCodeHelper.VerifyMachineCode(myMachineCode)) { base.OnStartup(e); } else { MessageBox.Show("机器码不匹配!"); return; } } protected override void RegisterRequiredTypes(IContainerRegistry containerRegistry) { base.RegisterRequiredTypes(containerRegistry); //注册全局变量 containerRegistry.RegisterScoped(); containerRegistry.RegisterScoped(); containerRegistry.RegisterScoped(); containerRegistry.RegisterScoped(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); //注册AutoMapper var config = new MapperConfiguration( cfg => cfg.AddProfile(), NullLoggerFactory.Instance ); containerRegistry.RegisterSingleton(() => config.CreateMapper()); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { //注册弹窗 containerRegistry.RegisterDialog("MessageBox"); // 注册通知管理器 INotificationManager NotificationManager = new NotificationManager(); containerRegistry.RegisterInstance(NotificationManager); // 注册仓储 containerRegistry.RegisterScoped(typeof(SqlSugarRepository<>)); //注册服务 containerRegistry.Register(); containerRegistry.Register(); } //指定模块加载方式(需要手动将模块生成的dll放入Modules文件夹中) protected override IModuleCatalog CreateModuleCatalog() { //指定模块加载方式为从文件夹中以反射发现并加载module(推荐用法) return new DirectoryModuleCatalog() { ModulePath = @".\Modules" }; } } }