using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using ModbusDemo.Device; using ModbusDemo.Model; using ModbusDemo.VIew; using ModbusDemo.VIewModel; using Prism.DryIoc; using Prism.Ioc; using System; using System.Configuration; using System.Data; using System.DirectoryServices; using System.IO; using System.IO.Ports; using System.Security.Cryptography; using System.Text; using System.Windows; namespace ModbusDemo { /// /// Interaction logic for App.xaml /// public partial class App : PrismApplication { /// /// 创建启动页面 /// /// 启动页面 protected override Window CreateShell() { return Container.Resolve(); } /// /// 实现控制反转和依赖注入功能 /// /// protected override void RegisterTypes(IContainerRegistry containerRegistry) { //将主页面和主页面的VM结合起来 containerRegistry.RegisterForNavigation(); //将线圈操作页面和线圈操作页面的VM结合起来 containerRegistry.RegisterForNavigation(); //将寄存器操作页面和寄存器操作页面的VM结合起来 containerRegistry.RegisterForNavigation(); //将寄存器操作页面和寄存器操作页面的VM结合起来 containerRegistry.RegisterForNavigation(); //将串口注册为全局唯一的单例 containerRegistry.RegisterSingleton(); //将读线圈注册 containerRegistry.Register(); //附加功能如何读取单数寄存器; //containerRegistry.RegisterForNavigation(); // 1. 加载配置文件 var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); // 2.解密连接字符串 string decryptedConnection = Decrypt(configuration.GetConnectionString("ConnStr")); // 3. 配置 DbContextOptions var options = new DbContextOptionsBuilder() .UseSqlServer(decryptedConnection) .Options; // 4. 注册 DbContext containerRegistry.Register(() => new ModbusDbContext(options)); } /// /// 程序打开默认是设置界面,来设置串口的各个东西 /// protected override void OnInitialized() { MainWindowViewModel mainWindowViewModel = App.Current.MainWindow.DataContext as MainWindowViewModel; mainWindowViewModel!.DefultNaigation(); base.OnInitialized(); } //硬编码 private static readonly byte[] Key = Encoding.UTF8.GetBytes("8Jn3pQ7sV9y$B&E)"); // 16字节,AES-128 private static readonly byte[] IV = Encoding.UTF8.GetBytes("2r5u8x/A?D*G-KaP"); // 16字节 /// /// 解密字符串 /// /// 加密后的Base64字符串 /// 解密后的原始字符串 public static string Decrypt(string encryptedText) { if (string.IsNullOrEmpty(encryptedText)) return string.Empty; using (Aes aes = Aes.Create()) { aes.Key = Key; aes.IV = IV; // 创建解密器 ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(encryptedText))) { using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { using (StreamReader sr = new StreamReader(cs)) { return sr.ReadToEnd(); } } } } } } }