当前位置: 首页 >综合 > > 正文

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

日期:2023-04-28 08:29:08 来源:OSCHINA

.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.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 灯泡上,选择代码修复,该功能会自动应用所有更改,以使代码恢复到正确的状态。支持批量修复:

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

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

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

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

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

上一篇:池州市住房公积金管理中心 全国异地公积金贷款_池州市住房公积金管理中心 环球观点 下一篇:池州市住房公积金管理中心 全国异地公积金贷款_池州市住房公积金管理中心 环球观点
x
推荐阅读