NET Core 3.0中的WPF

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

作者:依乐祝

原文链接:https://www.cnblogs.com/yilezhu/p/11099358.html

步骤

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

    我们想要实现的是引导应用程序并在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.csOnStartup方法,解析出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="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. 接下来我们修改一下MainWindow的xaml代码以便来显示我们的文本信息:

    <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. 当然,MainWindow的cs代码也要进行下调整,以便能够接受IOC注入进来的方法。
    public partial class MainWindow : Window
    {
        public MainWindow(ITextService textService)
        {
            InitializeComponent();
    
            Label.Content = textService.GetText();
        }
    }

结果

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

如上图所示:MainWindow调用了IOC注入进来的TextService服务并正确的显示了文字。

谢天谢地,没出bug,其实我想说,这张图为了偷懒,我都是盗的,文末上原文链接。

https://laurentkempe.com/2019/04/18/WPF-and-IOC-on-NET-Core-3-0/

最后

最近事情比较多,都没时间好好的分享文章了。当然,每当我闲下来的时候我就会对所学所用进行相应的总结后进行分享的。只是工作忙的原因,频次越来越低而已。

原文地址:https://www.cnblogs.com/Leo_wl/p/11106023.html

时间: 2024-11-08 22:38:45

NET Core 3.0中的WPF的相关文章

【译】.NET Core 3.0 中的新变化

.NET Core 3.0 是 .NET Core 平台的下一主要版本.本文回顾了 .Net Core 发展历史,并展示了它是如何从基本支持 Web 和数据工作负载的版本 1,发展成为能够运行 Web.桌面.机器学习.容器.IoT 等的版本 3.0. .NET Core 1 .NET Core 的历史可追溯到几年前,版本 1 是在 2016 年推出,旨在生成第一版开放源代码和跨平台(Windows.macOS 和 Linux)的 .NET.灵感来源于只能使用开放源代码框架的客户,以及需要在 Li

在ASP.NET Core 2.0中使用CookieAuthentication

在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允许做什么,今天的主题就是关于在ASP.NET Core 2.0中如何使用CookieAuthentication认证. 在ASP.NET Core 2.0中使用CookieAuthentication跟在1.0中有些不同,需要在ConfigureServices和Configure中分别设置,前者我

说说ASP.Net Core 2.0中的Razor Page

随着.net core2.0的发布,我们可以创建2.0的web应用了.2.0中新东西的出现,会让我们忘记老的东西,他就是Razor Page.下面的这篇博客将会介绍ASP.Net Core 2.0中的Razor Page. 在ASP.Net Core 2.0新特点之一就是支持Razor Page.今天的Razor Page是ASP.Net Core MVC中的一个子集.ASP.Net Core MVC 支持Razor Page意味着Razor Page应用从技术上来说就是MVC应用,同时Razo

用ASP.NET Core 1.0中实现邮件发送功能

准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试一下,何况是开源,下面是代码可实现SMTP邮件发送: using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; using System.Threading.Tasks; namespace ConsoleApp1 { public

ASP.NET Core 1.0 中使用 Swagger 生成文档

github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1.0中同样也支持. 依赖包 "dependencies": { "Swashbuckle.SwaggerGen": "6.0.0-rc1-final", "Swashbuckle.SwaggerUi": "6.0.0-rc

正在开发的一个以最简化的操作在 .NET Core 1.0 中处理微信请求的SDK

现有的微信SDK库在 .NET Core 1.0 中表示很有压力,比如 Deepleo.Weixin.SDK 和 Senparc.Weixin(即使现有一个转移到.NET Core 1.0的初始项目,但是暂时还不能用) .前者轻量后者全而轻便,但是按照我的个人观点看来,前者太轻便了,对于不记参数的我来说点不出来就等于白搭,后者需要自定义一个处理方法来执行相关任务,但是相关的类型对于我这个就爱点出来能解决的事绝不干多余的是的我来说,还是不大乐意去用.因此就结合两者自行开发一个适合自己使用的SDK库

ASP.NET Core 2.0中的HttpContext

ASP.NET Core 2.0中的HttpContext https://blog.csdn.net/weixin_34174322/article/details/87012345 将 Net 项目升级 Core项目经验:(二)修复迁移后Net Standard项目中的错误 https://www.colabug.com/2742683.html NET Core中怎么使用HttpContext.Current https://www.cnblogs.com/Leo_wl/p/6195683

在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据

在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持   Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 使用方法不一致,对于3.0以前版本升级有限制.如果前端代码以固定更没法用了. 在Asp.Net Core 3.0中如何使用  Newtonsoft.Json 库序列化数据 官方给出了兼容处理方案,操作步骤如下: 1.引用Microsoft.AspNetCore

IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

原文:IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型 原文: https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者: Andrew Lock 译者: Lamond Lu 本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard