Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

117 Zeilen
4.4 KiB

  1. using Microsoft.EntityFrameworkCore;
  2. using Microsoft.Extensions.Configuration;
  3. using ModbusDemo.Device;
  4. using ModbusDemo.Model;
  5. using ModbusDemo.VIew;
  6. using ModbusDemo.VIewModel;
  7. using Prism.DryIoc;
  8. using Prism.Ioc;
  9. using System;
  10. using System.Configuration;
  11. using System.Data;
  12. using System.DirectoryServices;
  13. using System.IO;
  14. using System.IO.Ports;
  15. using System.Security.Cryptography;
  16. using System.Text;
  17. using System.Windows;
  18. namespace ModbusDemo
  19. {
  20. /// <summary>
  21. /// Interaction logic for App.xaml
  22. /// </summary>
  23. public partial class App : PrismApplication
  24. {
  25. /// <summary>
  26. /// 创建启动页面
  27. /// </summary>
  28. /// <returns>启动页面</returns>
  29. protected override Window CreateShell()
  30. {
  31. return Container.Resolve<MainWindow>();
  32. }
  33. /// <summary>
  34. /// 实现控制反转和依赖注入功能
  35. /// </summary>
  36. /// <param name="containerRegistry"></param>
  37. protected override void RegisterTypes(IContainerRegistry containerRegistry)
  38. {
  39. //将主页面和主页面的VM结合起来
  40. containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>();
  41. //将线圈操作页面和线圈操作页面的VM结合起来
  42. containerRegistry.RegisterForNavigation<CoilUC, CoilUCViewModel>();
  43. //将寄存器操作页面和寄存器操作页面的VM结合起来
  44. containerRegistry.RegisterForNavigation<RegisterUC, RegisterUCViewModel>();
  45. //将寄存器操作页面和寄存器操作页面的VM结合起来
  46. containerRegistry.RegisterForNavigation<SettingsUC, SettingsUCViewModel>();
  47. //将串口注册为全局唯一的单例
  48. containerRegistry.RegisterSingleton<SerialPort>();
  49. //将读线圈注册
  50. containerRegistry.Register<ModbusRTU>();
  51. //附加功能如何读取单数寄存器;
  52. //containerRegistry.RegisterForNavigation<AttachUC, AttachUCViewModel>();
  53. // 1. 加载配置文件
  54. var configuration = new ConfigurationBuilder()
  55. .SetBasePath(Directory.GetCurrentDirectory())
  56. .AddJsonFile("appsettings.json")
  57. .Build();
  58. // 2.解密连接字符串
  59. string decryptedConnection = Decrypt(configuration.GetConnectionString("ConnStr"));
  60. // 3. 配置 DbContextOptions
  61. var options = new DbContextOptionsBuilder<ModbusDbContext>()
  62. .UseSqlServer(decryptedConnection)
  63. .Options;
  64. // 4. 注册 DbContext
  65. containerRegistry.Register<ModbusDbContext>(() => new ModbusDbContext(options));
  66. }
  67. /// <summary>
  68. /// 程序打开默认是设置界面,来设置串口的各个东西
  69. /// </summary>
  70. protected override void OnInitialized()
  71. {
  72. MainWindowViewModel mainWindowViewModel = App.Current.MainWindow.DataContext as MainWindowViewModel;
  73. mainWindowViewModel!.DefultNaigation();
  74. base.OnInitialized();
  75. }
  76. //硬编码
  77. private static readonly byte[] Key = Encoding.UTF8.GetBytes("8Jn3pQ7sV9y$B&E)"); // 16字节,AES-128
  78. private static readonly byte[] IV = Encoding.UTF8.GetBytes("2r5u8x/A?D*G-KaP"); // 16字节
  79. /// <summary>
  80. /// 解密字符串
  81. /// </summary>
  82. /// <param name="encryptedText">加密后的Base64字符串</param>
  83. /// <returns>解密后的原始字符串</returns>
  84. public static string Decrypt(string encryptedText)
  85. {
  86. if (string.IsNullOrEmpty(encryptedText))
  87. return string.Empty;
  88. using (Aes aes = Aes.Create())
  89. {
  90. aes.Key = Key;
  91. aes.IV = IV;
  92. // 创建解密器
  93. ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
  94. using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(encryptedText)))
  95. {
  96. using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
  97. {
  98. using (StreamReader sr = new StreamReader(cs))
  99. {
  100. return sr.ReadToEnd();
  101. }
  102. }
  103. }
  104. }
  105. }
  106. }
  107. }