莒县网站设计,苏州做网站公司选苏州聚尚网络,镇江微网站建设,昆明企业宣传片制作现在依赖注入在.Net里面已经普及#xff0c;自己常写一些简单的demo倒是无所谓#xff0c;但偶尔写一点正式的工程#xff0c;也免不了要使用一下#xff0c;于是总结了一下在WPF里面使用依赖注入。
在写简单Demo时候#xff0c;通常是在MainWindow的构造函数里面直接做初…现在依赖注入在.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/// /summarypublic 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.AddSingletonApiDatas();servicesCollection.AddSingletonTradeSpiImpl();servicesCollection.AddSingletonTradeSpiMiddle();servicesCollection.AddSingletonMainWindow();ServiceProvider servicesCollection.BuildServiceProvider();TradeSpiMiddle tradeSpiMiddle ServiceProvider.GetRequiredServiceTradeSpiMiddle();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.GetRequiredServiceMainWindow();mainWindow.Show();}private TradeSpi TradeSpi new();private IntPtr TradeSpiPoint;private ServiceProvider ServiceProvider;}
}