当前位置: 首页 > news >正文

WPF使用依赖注入

现在依赖注入在.Net里面已经普及,自己常写一些简单的demo倒是无所谓,但偶尔写一点正式的工程,也免不了要使用一下,于是总结了一下在WPF里面使用依赖注入。

在写简单Demo时候,通常是在MainWindow的构造函数里面直接做初始化,各种变量也都丢在MainWindow类里面。在使用依赖注入后,我发现在App里面完成一些初始化内容更合适,包括MainWindow也通过容器生成,需要注意的是,记得把App.xaml中的 StartupUri更改为 Startup,并把值改为自定义的启动函数,在启动函数里面调用MainWindow的Show方法。

App.xaml.cs

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Net.WebSockets;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows;namespace TradeClient
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : Application{public App(){LogManager.Configuration.Variables["ProgramName"] = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;LogManager.Configuration.Variables["StartTime"] = DateTime.Now.ToString("yyyyMMdd-HHmmss");var config = new ConfigurationBuilder().Build();var servicesCollection = new ServiceCollection();servicesCollection.AddLogging(loggingBuilder => loggingBuilder.AddNLog(config));servicesCollection.AddSingleton<ApiDatas>();servicesCollection.AddSingleton<TradeSpiImpl>();servicesCollection.AddSingleton<TradeSpiMiddle>();servicesCollection.AddSingleton<MainWindow>();ServiceProvider = servicesCollection.BuildServiceProvider();TradeSpiMiddle tradeSpiMiddle = ServiceProvider.GetRequiredService<TradeSpiMiddle>();tradeSpiMiddle.InitTradeSpi(ref TradeSpi);int size = Marshal.SizeOf(TradeSpi);TradeSpiPoint = Marshal.AllocHGlobal(size);Marshal.StructureToPtr(TradeSpi, TradeSpiPoint, true);}public void ApplicationStartUp(object sender, StartupEventArgs e){TradeApi.CreateTradeApi();TradeApi.RegisterSpi(TradeSpiPoint);TradeApi.RegisterFront("127.0.0.1", 10001);TradeApi.Init();MainWindow mainWindow = ServiceProvider.GetRequiredService<MainWindow>();mainWindow.Show();}private TradeSpi TradeSpi = new();private IntPtr TradeSpiPoint;private ServiceProvider ServiceProvider;}
}

http://www.lryc.cn/news/139890.html

相关文章:

  • 玩转科技|了解AI平台桌面客户端—ChatBox
  • visual studio 2022.NET Core 3.1 未显示在目标框架下拉列表中
  • 人工智能项目集合推荐(数据集 模型训练 C++和Android部署)
  • C# 服务HTTPS 对 请求被中止: 未能创建 SSL/TLS 安全通道报错
  • 二级MySQL(七)——表格数据修改
  • 【日常积累】Linux下sftp搭建
  • 【深入浅出C#】章节 9: C#高级主题:多线程编程和并发处理
  • Windows Server服务器安全加固基线配置
  • 基于NXP i.MX 6ULL核心板的物联网模块开发案例(4)
  • 英语——强调
  • 全流程R语言Meta分析核心技术教程
  • 【C++精华铺】9.STL string
  • 【PACS】医学影像管理系统源码带三维重建后处理技术
  • 从0开始学go 第一天
  • Spring Cloud Nacos详解
  • 2023谷歌开发者大会直播大纲「初稿」
  • react import 引用失效 node_modules/@types/react/index.d.ts not a module.ts
  • Unity中的Unistorm3.0天气系统笔记
  • VMVareC++开发环境快速配置
  • 数据库为什么使用B+树而不是B树做索引
  • java必知必会--面向对象及相关基础知识
  • 【推荐】Spring与Mybatis集成
  • 中科驭数受邀在招商银行金融科技论坛作异构计算主题分享 解码金融科技先进算力构建之路
  • Maven打包方式pom和jar和war的区别
  • 【51单片机】EEPROM-IIC实验(按键控制数码管)
  • 【java】【springboot】【idea】springboot项目pom.xml 灰色下划线
  • [JavaWeb]【十四】web后端开发-MAVEN高级
  • 浏览器跨域
  • ffmpeg windows环境MinGW+msys2编译so库
  • python VTK PyQt5 VTK环境搭建 创建 渲染窗口及三维模型,包含 三维模型交互;