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();
}
}
}
}
}
}
}