WCF服务的POCO类 - 代理生成器如何工作/互操作性
问题描述:
我正在阅读编程实体框架4.0和我在POCO & WCF章节。WCF服务的POCO类 - 代理生成器如何工作/互操作性
生成代理类后,我瞥了一眼生成的代码:
public partial class StateObject : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
/* ........... */
[System.Runtime.Serialization.DataMemberAttribute()]
public ConsoleApplicationPOCO.POCOCustomerService.State State {
get {
return this.StateField;
}
set {
if ((this.StateField.Equals(value) != true)) {
this.StateField = value;
this.RaisePropertyChanged("State");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
而一些问题激起我的头:
- 如何代码生成器知道如何实现setter方法,特别是呼叫RaisePropertyChanged方法和如果陈述
- 如何发电机知道如何im Plement 保护无效RaisePropertyChanged(字符串propertyName)
- 作者说这个解决方案可以用于不使用.NET的客户端。怎么来的,如果我们仍然依靠INotifyPropertyChanged的和IExtensibleDataObject
答
1)发电机着眼于由目标类公开的数据成员,并创建了一个getter和setter为每一个一个属性。
2)Microsoft决定生成的类将实现System.ComponentModel.INotifyPropertyChanged
接口,因此每个生成的setter包含一个调用RaisePropertyChanged
以支持此接口。这是需要完整属性设置器的原因之一。
3)这只是Microsoft的服务客户端实现。如果您从其他编程IDE添加对该服务的引用,则无法获得.Net框架特定的生成代码。 IDE将根据自己的需要生成服务引用代码。