【愚公系列】2022年02月 .NET架构班 004-ABP vNext在WPF项目使用

举报
愚公搬代码 发表于 2022/02/14 22:06:20 2022/02/14
【摘要】 前言配置环境vs2022NET 6window11 一、ABP vNext在WPF项目使用 1.安装依赖包Microsoft.Extensions.HostingSerilog.Extensions.HostingSerilog.Extensions.LoggingSerilog.Sinks.AsyncSerilog.Sinks.ConsoleSerilog.Sinks.FileVolo....

前言

配置环境

  • vs2022
  • NET 6
  • window11

一、ABP vNext在WPF项目使用

1.安装依赖包

Microsoft.Extensions.Hosting
Serilog.Extensions.Hosting
Serilog.Extensions.Logging
Serilog.Sinks.Async
Serilog.Sinks.Console
Serilog.Sinks.File
Volo.Abp.Autofac

在这里插入图片描述

二、模块类

1.创建模块类

MyWpfAppModule

[DependsOn()]
public class MyWpfAppModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //设置单例
        context.Services.AddSingleton<MainWindow>();
    }
}

2.注册模块类

public partial class App : Application
{
    private IAbpApplicationWithInternalServiceProvider _abpApplication;

    protected async override void OnStartup(StartupEventArgs e)
    {
        //创建日志
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Async(c => c.File("Logs/logs.txt"))
            .CreateLogger();

        try
        {
            Log.Information("Starting WPF host.");
            //创建ABP应用并注册模块类、服务类
            _abpApplication =  await AbpApplicationFactory.CreateAsync<MyWpfAppModule>(options =>
            {
                options.Services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
            });
            //初始化ABP应用
            await _abpApplication.InitializeAsync();
            //创建服务类映射MainWindow窗体
            _abpApplication.Services.GetRequiredService<MainWindow>()?.Show();

        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly!");
        }
    }

    protected async override void OnExit(ExitEventArgs e)
    {
        await _abpApplication.ShutdownAsync();
        Log.CloseAndFlush();
    }
}

三、服务类

1.创建服务类

HelloWorldService 服务类

public class HelloWorldService : ITransientDependency
{
    public ILogger<HelloWorldService> Logger { get; set; }

    public HelloWorldService()
    {
        Logger = NullLogger<HelloWorldService>.Instance;
    }
    public string SayHello()
    {
        Logger.LogInformation("Call SayHello");
        return "Hello world!";
    }
}

四、Autofac的配置

1.安装依赖包

Volo.Abp.Autofac

2.服务属性配置

App配置

public partial class App : Application
{
    private IAbpApplicationWithInternalServiceProvider _abpApplication;

    protected async override void OnStartup(StartupEventArgs e)
    {
        //创建日志
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Async(c => c.File("Logs/logs.txt"))
            .CreateLogger();

        try
        {
            Log.Information("Starting WPF host.");
            //创建ABP应用并注册模块类、服务类
            _abpApplication =  await AbpApplicationFactory.CreateAsync<MyWpfAppModule>(options =>
            {
                options.UseAutofac();
                options.Services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
            });
            //初始化ABP应用
            await _abpApplication.InitializeAsync();
            //创建服务类映射MainWindow窗体
            _abpApplication.Services.GetRequiredService<MainWindow>()?.Show();

        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly!");
        }
    }

    protected async override void OnExit(ExitEventArgs e)
    {
        await _abpApplication.ShutdownAsync();
        Log.CloseAndFlush();
    }
}

模块类中添加

[DependsOn(typeof(AbpAutofacModule))]
public class MyWpfAppModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //设置单例
        context.Services.AddSingleton<MainWindow>();
    }
}

3.使用属性注入

public partial class MainWindow : Window
{
    private readonly HelloWorldService _helloWorldService;

    public MainWindow(HelloWorldService helloWorldService)
    {
        _helloWorldService = helloWorldService;
        InitializeComponent();
    }

    protected override void OnContentRendered(EventArgs e)
    {
        HelloLabel.Content = _helloWorldService.SayHello();
    }
}
<Window x:Class="Acme.MyWpfApp.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:Acme.MyWpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Label Name="HelloLabel" FontSize="90" Margin="58,129,-58,-129"/>
    </Grid>
</Window>

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。