C# 是否可以在服务器应用程序中利用WPF属性系统?

C# 是否可以在服务器应用程序中利用WPF属性系统?,c#,wpf,C#,Wpf,我们有遗留代码,它由业务对象组成,这些业务对象具有上百个属性和层次结构中的两个层。 我们的目标是将其转换为一个C#服务器应用程序,该应用程序将通过WCF调用。然而,WPF属性系统似乎是一个很好的工具,因为它效率更高,而且还有一些额外的特性,比如属性继承,这对我们的库很有用 但是,我不知道在非WPF应用程序中使用它是否可行。有人能告诉我它是否有效吗?是否有在非WPF应用程序中使用的示例项目?WPF主要基于DependencyProperties,但DependencyProperties不是WPF

我们有遗留代码,它由业务对象组成,这些业务对象具有上百个属性和层次结构中的两个层。 我们的目标是将其转换为一个C#服务器应用程序,该应用程序将通过WCF调用。然而,WPF属性系统似乎是一个很好的工具,因为它效率更高,而且还有一些额外的特性,比如属性继承,这对我们的库很有用


但是,我不知道在非WPF应用程序中使用它是否可行。有人能告诉我它是否有效吗?是否有在非WPF应用程序中使用的示例项目?

WPF主要基于DependencyProperties,但DependencyProperties不是WPF特有的特性,您可以自己轻松地使用它


对于INotifyPropertyChanged接口,您也可以这样说-它可以在WPF之外实现和使用。

DependencyProperties支持来自于位于WindowsBase.dll中的类DependencyObject

如果添加该引用没有问题,那么在服务器端解决方案中使用它绝对没有问题

但要注意的是,这意味着你必须从DependencyObject继承你的类,这可能会导致一个问题——C#不支持多重继承

实现INotifyPropertyChanged虽然更容易、更轻,但除了更改通知之外,不会给您带来任何东西,而更改通知实际上并不多。DependecProperties的特性集要大得多(如您所提到的)。此外,如果使用绑定,DependencyProperties工作得更快,因为它不使用反射(而INPC使用反射)

我不知道有哪种服务器端解决方案尝试过您的方法,但如果您确实想要DPs公开的功能,我真的不明白为什么不尝试

---编辑---


DependecyObject继承DispatcherObject,这使得它只能从创建它的线程访问,因此多线程处理这些对象将是一件痛苦的事情。如果您需要多线程,那么这是一个很大的障碍。

可行吗?对实用的?可能不会

作为服务器应用程序,您几乎肯定希望从任何线程访问业务对象。但是依赖项对象具有线程亲缘关系,必须由创建它们的线程访问,必要时通过它们的调度程序访问。如果您使用dispatcher,这意味着您将需要一些东西来泵送它的事件

这假设您的业务对象具有通常采用默认值的属性。如果没有“通用默认设置”,稀疏存储算法将无法帮助您节省内存。稀疏存储系统在WPF中运行良好的原因是,控件具有太多属性,其中许多属性总是具有相同的值


从本质上讲,您可能会有相当大的痛苦,甚至可能不会减少内存使用。在我看来,您最好以其他方式解决您的问题,或者实现您自己的自由线程稀疏存储机制(如果您验证它实际上会减少内存使用量)。

模拟依赖属性的使用是否需要那么多工作

不需要支持XAML,它应该足够简单

但是,我发现创建默认索引器并使用字符串作为索引更容易

您只需记住在任何解析文件中包含[]


当然,这是一种更便宜的动态产权制度。

你说的是从属产权吗?