.NET 社区工具包 8.2 发布,带来代码修复器、性能改进

452次阅读
没有评论

.NET Community Toolkit 8.2 版正式发布!新版本包括在运行时和 MVVM Toolkit 源码生成器中的性能改进、新代码修复程序、新的用户请求功能等内容。

.NET 社区工具包是一组适用于所有 .NET 开发人员,且与不绑定 UI 平台的帮助程序和 API。该工具包由 Microsoft 维护和发布,是 .NET 基金会的一部分,它被多个微软内部项目和应用程序使用,例如 Microsoft Store。

.NET 社区工具包的所有库最初都是 Windows 社区工具包的一部分,但随着时间的推移,仅针对 .NET 且不特定于 Windows 的 API 数量不断增加,微软决定将 .NET 相关的内容拆分到一个单独的项目中,以便它们可以独立发展,.NET Community Toolkit 由此诞生。

[RelayCommand] 的自定义属性

新的 8.2.0 版本的 MVVM 工具包在使用 [RelayCommand] 时包括对自定义属性的支持,利用原生的 field:  property: C# 语法来指示自定义属性的目标。这样一来,在使用 [RelayCommand] 生成 MVVM 命令时,可以完全控制所有生成成员的属性。

比如

[RelayCommand]
[property: JsonIgnore]
private void DoWork()
{
// Do some work here...
}

会生成如下成员,且生成的 DoWorkCommand 属性具有指定的属性

private RelayCommand? _doWorkCommand;

[JsonIgnore]
public IRelayCommand DoWorkCommand => _doWorkCommand ??= new RelayCommand(DoWork);

相关文档

新的 [ObservableProperty] 更改 hook

MVVM 中一个相对常见的场景是有一些“选择的项目”可观察属性,例如当前选择的用户,或嵌套的视图模型。当此属性的值发生变化时,还必须对新旧实例进行一些调整。例如,设置一些“selected”属性,或者订阅事件。

以前,在这种情况下使用 [ObservableProperty] 并不理想,因为它没有必要的基础设施,来轻松注入此类逻辑以对设置的旧值和新值执行必要的状态更改。

为了解决这个问题,从 MVVM 工具包的 8.2 版本开始,为所有 [ObservableProperty] 字段生成了两个新的属性更改 hook。示例:

[ObservableProperty]
private DocumentViewModel _selectedDocument;

现在将生成如下代码:

public DocumentViewModel SelectedDocument
{
get => _selectedDocument;
set
{
if (!EqualityComparer<DocumentViewModel>.Default.Equals(_selectedDocument, value))
{
DocumentViewModel? oldValue = _selectedDocument;
OnNameChanging(value);
OnNameChanging(oldValue, value);
OnPropertyChanging();
_selectedDocument = value;
OnNameChanged(value);
OnNameChanged(oldValue, value);
OnPropertyChanged();
}
}
}

partial void OnSelectedDocumentChanging(DocumentViewModel value);
partial void OnSelectedDocumentChanged(DocumentViewModel value);

partial void OnSelectedDocumentChanging(DocumentViewModel? oldValue, DocumentViewModel newValue);
partial void OnSelectedDocumentChanged(DocumentViewModel? oldValue, DocumentViewModel newValue);

注意正在生成的两个新的“OnPropertyNameChanging”和“Changed”方法,这两个提供了易于使用的 hook,用于注入在每个属性更改事件上触发的代码,且可以修改正在设置的旧值和新值。

MVVM 工具包代码修复器 

之前版本的 MVVM Toolkit 添加了两个新的诊断分析器,它们会在错误访问标有 [ObservableProperty] 的字段,以及在使用声明具有 [ObservableProperty] 和类似属性的类型时产生警告。

在 8.2 版本中,这两个分析器还包括内置的代码修复器。只需将鼠标悬停在 IntelliSense 灯泡上,选择代码修复,该功能会自动应用所有更改,以使代码恢复到正确的状态。支持批量修复:

.NET 社区工具包 8.2 发布,带来代码修复器、性能改进

MVVM 工具包源代码生成器优化

MVVM Toolkit 8.2 还对其源代码生成器进行了一些性能改进。这一次重点是优化增量管道,以最大限度地减少内存使用,并确保不会在并发执行中保持不必要的对象。

以下是一些用于改进这一点的 PR:

  • 将剩余的诊断移至分析器 ( #581 ):MVVM 工具包中的另外两个诊断已移至诊断分析器,该分析器可以同时运行并在进程外运行。
  • 在分析器中尽早解析符号 ( #587 ):所有必要的分析器符号现在都在初始回调设置期间解析,加快了每个编译实例中的回调执行。

 

其他改动和改进可在发布公告中查阅。

Read More 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)
Generated by Feedzy