【发布时间】:2010-02-01 16:01:01
【问题描述】:
我喜欢使用部分类扩展客户端类的想法,这些类是 WCF 服务的数据协定。但是我遇到了一个严重破坏聚会的问题。
想象一下在服务器端我有一堂课:
[DataContract]
public class SolidObject
{
[DataMember]
public Point Position { get; set; }
[DataMember]
public Size Size { get; set; }
}
在客户端,我生成了一个代理类,用于业务逻辑层。根据业务逻辑的需要,我这样扩展:
public partial class SolidObject
{
public Rect Bounds { get { return new Rect(Position.X - Size.Width / 2, Position.Y - Size.Height / 2, Size.Width, Size.Height); }}
}
现在我想确保无论何时 Position 或 Size 发生变化,都会调用 Bounds chage 事件。通过代码很容易做到:
PropertyChanged += (sender, e) =>
{
if ((e.PropertyName == "Position") || (e.PropertyName == "Size")) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Bounds"));
};
问题是放置这段代码的好地方在哪里。
如果对象不是由服务调用创建的,我会将其放入构造函数中。但是 WCF 服务会忽略客户端的构造函数,请参阅 constructor not showing up in my WCF client, serialization problem?。
现在,在服务响应之后,我的程序立即搜索数据协定层次结构,获取所需对象并添加事件处理程序。但我认为这是不对的。
所以我很感兴趣在哪里做更好,或者,也许,认为应该改变整个方法。任何想法表示赞赏。
【问题讨论】:
标签: c# .net wcf inotifypropertychanged