我正在尝试实现一个非常简单且更重要的是可选的对象跟踪系统,类似于实体框架如何跟踪对象更改(更改跟踪在实体框架中如何工作)。
我有一个所有其他对象都继承自的基类。该类有 1 个称为“modified”的布尔字段。对此的显式解决方案是更新其他类的所有属性上的每个 setter,以modified = true在触发 setter 时进行设置。此解决方案已在此处详细介绍创建一个事件来监视变量的更改。
我想要一个更隐式的解决方案。我有很多对象和很多属性。更新设置器非常混乱。我不想直接模仿实体框架的工作方式,因为它对于我当前的要求来说太昂贵了。我想要一个可以循环检查的对象列表modified == true。这使我可以选择跟踪对象并快速检查它们是否已更改,而无需触发每个单独对象的更新。有没有一种方法可以让我在所有属性 getter 和 setter 上隐式设置某种侦听器?
我知道这段代码不存在,但是 .NET 是否有办法监视对象以查看它是否已更改。
[OnChange=ObjectChanged()] //maybe this way
public class MyClass
{
bool modified {get; set;}
public MyClass() : OnChange(ObjectChanged) //or this way
{
}
private void ObjectChanged()
{
modified = true;
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,我不想更新每个设置器或复制实体框架的功能。
.NET 框架中没有内置任何功能,但有第三方工具可以做到这一点。
其中一种选项是Fody/PropertyChanged,它将调用OnPropertyChanged注入到类的所有自动属性设置器中。您可以订阅该PropertyChanged事件并更新您的布尔标志。作为额外的好处,(a) 您可以获得更改的属性的名称,(b) 其他类(例如您的 UI 框架)也可以订阅该事件。