.NET Core 3.0中WPF使用IOC的圖文教程
前言
我們都知道.NET Core 3.0已經(jīng)發(fā)布了第六個(gè)預(yù)覽版,我們也知道.NET Core 3.0現(xiàn)在已經(jīng)支持創(chuàng)建WPF項(xiàng)目了,剛好今天在寫一個(gè)代碼生成器的客戶端的時(shí)候用到了WPF,所以就把WPF創(chuàng)建以及使用IOC的過(guò)程記錄一下,希望能對(duì)大家有所幫助。當(dāng)然文章實(shí)例我就以我曾閱讀過(guò)的一篇文章的示例代碼來(lái)進(jìn)行演示了。
步驟
1、通過(guò)命令行創(chuàng)建wpf項(xiàng)目,當(dāng)然你也可以通過(guò)vs2019來(lái)進(jìn)行創(chuàng)建。具體的步驟就不演示了,當(dāng)然,如果你還不會(huì)用vs2019創(chuàng)建項(xiàng)目,那么請(qǐng)你右上角關(guān)閉網(wǎng)頁(yè),省的煩心。
❯ mkdir WpfIoc ❯ cd WpfIoc ❯ dotnet.exe --version 3.0.100-preview6-012264 ❯ dotnet new wpf The template "WPF Application" was created successfully. Processing post-creation actions... Running 'dotnet restore' on C:\Users\laure\projects\WpfIoc\WpfIoc.csproj... Restore completed in 90.03 ms for C:\Users\laure\projects\WpfIoc\WpfIoc.csproj. Restore succeeded. ❯ dotnet build Microsoft (R) Build Engine version 16.1.54-preview+gd004974104 for .NET Core Copyright (C) Microsoft Corporation. All rights reserved. Restore completed in 19.92 ms for C:\Users\laure\projects\WpfIoc\WpfIoc.csproj. C:\Program Files\dotnet\sdk\3.0.100-preview6-012264\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(151,5): message NETSDK1057: You are using a preview version of .NET Core. See: https://aka.ms/dotnet-core-preview [C:\Users\laure\projects\WpfIoc\WpfIoc.csproj] WpfIoc -> C:\Users\laure\projects\WpfIoc\bin\Debug\netcoreapp3.0\WpfIoc.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63
我們想要實(shí)現(xiàn)的是引導(dǎo)應(yīng)用程序并在MainWindow的構(gòu)造函數(shù)中注入一個(gè)服務(wù),該服務(wù)將被調(diào)用以便在應(yīng)用程序的主窗口上顯示一些文本。
2、我們首選要安裝下Microsoft Extensions DependencyInjectionnuget包,當(dāng)然你也可以通過(guò)下面的方式進(jìn)行添加,不過(guò)最好還是通過(guò)nuget的方式引入最新的預(yù)覽版即可。
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19304.6" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\StoneGenerate.Core\StoneGenerate.Core.csproj" /> </ItemGroup> </Project>
3、創(chuàng)建一個(gè)ITextService接口服務(wù),這個(gè)接口將由依賴注入容器注入到MainWindow類中進(jìn)行使用。
public interface ITextService { string GetText(); }
4、當(dāng)然你還得創(chuàng)建一個(gè)TextService類來(lái)實(shí)現(xiàn)上面的接口。
class TextService : ITextService { private string _text; public TextService(string text) { _text = text; } public string GetText() { return _text; } }
5、接下來(lái)在我們的入口App.xaml.cs文件中配置我們的IOC容器,并入住我們的服務(wù),相信做過(guò).NET Core項(xiàng)目的你,對(duì)下面的代碼應(yīng)該都非常的熟悉,這里就不過(guò)多的解釋了,省的浪費(fèi)大家的寶貴時(shí)間。
public App() { var serviceCollection = new ServiceCollection(); ConfigureServices(serviceCollection); _serviceProvider = serviceCollection.BuildServiceProvider(); } private void ConfigureServices(IServiceCollection services) { services.AddSingleton<ITextService>(provider => new TextService("Hi WPF .NET Core 3.0")); services.AddSingleton<MainWindow>(); }
6、接下來(lái)我們重寫一下App.xaml.cs的OnStartup方法,解析出MainWindow 并show出來(lái)
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var main = serviceProvider.GetRequiredService<MainWindow>(); main.Show(); }
當(dāng)然,這也就意味著你得移除App.xmal中的啟動(dòng)選項(xiàng),代碼如下:
<Application x:Class="wpfioc.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:wpfioc" Startup="App_OnStartup"> <Application.Resources> </Application.Resources> </Application>
1、接下來(lái)我們修改一下MainWindow的xaml代碼以便來(lái)顯示我們的文本信息:
<Window x:Class="WpfIoc.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfIoc" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="9*" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Label Name="Label" Content="Hello .NET Core!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40" /> </Grid> </Window>
2、當(dāng)然,MainWindow的cs代碼也要進(jìn)行下調(diào)整,以便能夠接受IOC注入進(jìn)來(lái)的方法。
public partial class MainWindow : Window { public MainWindow(ITextService textService) { InitializeComponent(); Label.Content = textService.GetText(); } }
結(jié)果
相信上面的繁瑣的步驟你也都看完了,那么接下來(lái)就是見證奇跡的時(shí)刻了,睜開你的雙眼,奉上精美圖片一張:
如上圖所示:MainWindow調(diào)用了IOC注入進(jìn)來(lái)的TextService服務(wù)并正確的顯示了文字。
謝天謝地,沒出bug,其實(shí)我想說(shuō),這張圖為了偷懶,我都是盜的,文末上原文鏈接。
https://laurentkempe.com/2019/04/18/WPF-and-IOC-on-NET-Core-3-0/
最后
最近事情比較多,都沒時(shí)間好好的分享文章了。當(dāng)然,每當(dāng)我閑下來(lái)的時(shí)候我就會(huì)對(duì)所學(xué)所用進(jìn)行相應(yīng)的總結(jié)后進(jìn)行分享的。只是工作忙的原因,頻次越來(lái)越低而已。
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。
上一篇:.Net項(xiàng)目中NLog的配置和使用實(shí)例詳解
欄 目:ASP.NET
下一篇:visual studio 2019正式版安裝簡(jiǎn)單教程
本文標(biāo)題:.NET Core 3.0中WPF使用IOC的圖文教程
本文地址:http://mengdiqiu.com.cn/a1/ASP_NET/10908.html
您可能感興趣的文章
- 01-11如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查
- 01-11淺析.Net Core中Json配置的自動(dòng)更新
- 01-11.net core高吞吐遠(yuǎn)程方法如何調(diào)用組件XRPC詳解
- 01-11.NET Core 遷移躺坑記續(xù)集之Win下莫名其妙的超時(shí)
- 01-11.NET開發(fā)人員關(guān)于ML.NET的入門學(xué)習(xí)
- 01-11docker部署Asp.net core應(yīng)用的完整步驟
- 01-11.net core webapi jwt 更為清爽的認(rèn)證詳解
- 01-11ASP.NET Core靜態(tài)文件的使用方法
- 01-11.NET Core 3.0之創(chuàng)建基于Consul的Configuration擴(kuò)展組件
- 01-11.net core EF Core調(diào)用存儲(chǔ)過(guò)程的方式


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11vscode extension插件開發(fā)詳解
- 01-11VsCode插件開發(fā)之插件初步通信的方法
- 01-11如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查
- 01-11.net core高吞吐遠(yuǎn)程方法如何調(diào)用組件
- 01-11淺析.Net Core中Json配置的自動(dòng)更新
- 01-11.NET開發(fā)人員關(guān)于ML.NET的入門學(xué)習(xí)
- 01-11.NET Core 遷移躺坑記續(xù)集之Win下莫名其
- 01-11.net core webapi jwt 更為清爽的認(rèn)證詳解
- 01-11docker部署Asp.net core應(yīng)用的完整步驟
- 01-11ASP.NET Core靜態(tài)文件的使用方法
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery