【愚公系列】2022年02月 .NET架构班 004-ABP vNext在WPF项目使用
【摘要】 前言配置环境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)