.NET Core 3.0中WPF使用IOC的图文教程
 更新时间:2019年06月28日 08:26:09   作者:依乐祝  

这篇文章主要给大家介绍了关于在.NET Core 3.0中WPF使用IOC的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言
我们都知道.NET Core 3.0已经发布了第六个预览版,我们也知道.NET Core 3.0现在已经支持创建WPF项目了,刚好今天在写一个代码生成器的客户端的时候用到了WPF,所以就把WPF创建以及使用IOC的过程记录一下,希望能对大家有所帮助。当然文章实例我就以我曾阅读过的一篇文章的示例代码来进行演示了。
步骤

1、通过命令行创建wpf项目,当然你也可以通过vs2019来进行创建。具体的步骤就不演示了,当然,如果你还不会用vs2019创建项目,那么请你右上角关闭网页,省的烦心。

❯ 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: 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

我们想要实现的是引导应用程序并在MainWindow的构造函数中注入一个服务,该服务将被调用以便在应用程序的主窗口上显示一些文本。
2、我们首选要安装下Microsoft Extensions DependencyInjectionnuget包,当然你也可以通过下面的方式进行添加,不过最好还是通过nuget的方式引入最新的预览版即可。

<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、创建一个ITextService接口服务,这个接口将由依赖注入容器注入到MainWindow类中进行使用。

public interface ITextService
{
string GetText();
}

4、当然你还得创建一个TextService类来实现上面的接口。

class TextService : ITextService
{
private string _text;

public TextService(string text)
{
_text = text;
}

public string GetText()
{
return _text;
}
}

5、接下来在我们的入口App.xaml.cs文件中配置我们的IOC容器,并入住我们的服务,相信做过.NET Core项目的你,对下面的代码应该都非常的熟悉,这里就不过多的解释了,省的浪费大家的宝贵时间。

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、接下来我们重写一下App.xaml.cs的OnStartup方法,解析出MainWindow 并show出来

protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var main = serviceProvider.GetRequiredService<MainWindow>();
main.Show();
}

当然,这也就意味着你得移除App.xmal中的启动选项,代码如下:

<Application x:Class=”wpfioc.App”
xmlns=”schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”schemas.microsoft.com/winfx/2006/xaml”
xmlns:local=”clr-namespace:wpfioc”
Startup=”App_OnStartup”>
<Application.Resources>
</Application.Resources>
</Application>

1、接下来我们修改一下MainWindow的xaml代码以便来显示我们的文本信息:

<Window x:Class=”WpfIoc.MainWindow”
xmlns=”schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”schemas.microsoft.com/winfx/2006/xaml”
xmlns:d=”schemas.microsoft.com/expression/blend/2008″
xmlns:mc=”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、当然,MainWindow的cs代码也要进行下调整,以便能够接受IOC注入进来的方法。

public partial class MainWindow : Window
{
public MainWindow(ITextService textService)
{
InitializeComponent();

Label.Content = textService.GetText();
}
}

结果

相信上面的繁琐的步骤你也都看完了,那么接下来就是见证奇迹的时刻了,睁开你的双眼,奉上精美图片一张:

如上图所示:MainWindow调用了IOC注入进来的TextService服务并正确的显示了文字。
谢天谢地,没出bug,其实我想说,这张图为了偷懒,我都是盗的,文末上原文链接。
laurentkempe.com/2019/04/18/WPF-and-IOC-on-NET-Core-3-0/
最后

最近事情比较多,都没时间好好的分享文章了。当然,每当我闲下来的时候我就会对所学所用进行相应的总结后进行分享的。只是工作忙的原因,频次越来越低而已。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。

core3.0
wpf
ioc

相关文章
asp.net 无刷新翻页就是这么简单 前两天看了一个自定义分页控件,和AspNetPager一样是实现IPostBackEventHandler接口,不过简洁许多,就想能不能实现ICallbackEventHandler接口做到无刷新分页呢?想到了就马上去做,终于,设想变成了现实!! 2010-03-03
.NET(C#)连接各类数据库代码-集锦.NET(C#)连接各类数据库代码-集锦… 2007-03-03
VS2015下简单使用EF框架的方法这篇文章主要为大家详细介绍了VS2015下简单使用EF框架的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-08-08
C#中HTML字符转换函数分享在ASP.Net中经常会从网面中取数据或更新网页的显示。因为HTML中有些特殊字符如<, >, &等,显示实际值不一致,造成保存到数据库再取出来时会不一样 2012-07-07
详解EFCore中的导航属性这篇文章主要介绍了详解EFCore中的导航属性的相关资料,帮助大家更好的理解和学习使用ASP.NET CORE,感兴趣的朋友可以了解下 2021-03-03
WPF实现画线动画效果这篇文章主要为大家详细介绍了WPF实现画线动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-12-12
在Asp.net网页上写读Cookie的两种不同语法介绍asp.net开发时,为了存储一些信息通常是Session与Cookie同时使用,本文将会补充一下Cookie相关的资料,感兴趣的朋友可以了解一下在网页上写读Cookie的实现,希望本文对你有所帮助 2013-01-01
VS2017做为Unity3D的脚本编辑器需要的最精简组件这篇文章主要为大家详细介绍了VS2017做为Unity3D的脚本编辑器需要的最精简组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04
ASP.NET MVC 5之邮件服务器与客户端这篇文章主要介绍了ASP.NET MVC5邮件服务器与客户端,需要的朋友可以参考下 2015-09-09
调试ASP.NET应用程序的方法和技巧调试ASP.NET应用程序的方法和技巧… 2006-09-09

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。