自动属性上的 INotifyPropertyChanged-Feature

INotifyPropertyChanged-Feature on Auto-Properties

我有很多模型-类,它们实现了 INotify属性Changed-Interface,以便在值更改时更新 UI。

遗憾的是,必须完整地编写属性才能支持此功能。我已经通过使用 BaseClass 中的 'SetPropertyValue'-Method() 减少了我的代码。

private string _title;
public string Title 
{
    get { return title; }
    set { SetPropertyValue("Title", ref _title, value ); }
}

但是在一个文件中写了 20 个这样的属性,与自动实现的属性不同,在短时间内理解文件的内容并不是那么简单。

我想要的是这样写我的属性:

[NotifyChanged]
public string Title { get; set; }

我已经检查过了 PostSharp 但免费版只有 10 个 类(这是一个业余项目,所以我不想花太多钱)。

是否有可能将我的一个逻辑附加到 C#-Compiler(作为预编译器)? 我想在我的代码的不同地方使用这样的功能来减少不必要的代码行(尤其是对于自动属性)。

或者可以使用 VisulStudio-Extension?

尝试Fody。它是使用专用 msbuild 任务在构建过程中修改 IL 代码的库。

它有大量插件,包括 PropertyChanged,应该适合您的场景。 此插件为您提供属性 ImplementPropertyChanged,您可以将其应用于 class。然后 Fody 将生成对所有自动属性实施 INotifyPropertyChanged 的​​代码。

Second option 如果您有 ReSharper 版本 7 或更高版本。它具有重构功能,可以帮助您实施 INotifyPropertyChanges。例如,它可以将 auto-属性 转换为 "normal" 属性 实现接口。 你可能不会完全满足你 - 这种方法可能对你来说很有趣,因为它不涉及额外的库和程序集修改。

另一种选择是Castle DynamicProxyPostSharpFody 之间的区别在于 DynamicProxy 在运行时动态生成其代理。