Классы POCO с сервисом WCF - как работает прокси-генератор / совместимость - PullRequest
0 голосов
/ 05 января 2012

Я читаю Программирование Entity Framework 4.0 , и я нахожусь на главе POCO & WCF.

После генерации прокси-классов я взглянул на сгенерированный код:

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));
        }
    }

И у меня в голове возникло несколько вопросов:

  • откуда генератор кода знает, как реализовать методы-установщики, в частности, вызывая RaisePropertyChanged и оператор if
  • как генератор знает, как реализовать защищенный void RaisePropertyChanged (string propertyName)
  • Автор говорит, что это решение можно использовать с клиентами, которые не используют .NET. Почему, если мы все еще зависим от INotifyPropertyChanged и IExtensibleDataObject

1 Ответ

0 голосов
/ 05 января 2012

1) Генератор просматривает DataMembers, предоставляемые целевым классом, и создает одно свойство с геттером и сеттером для каждого.

2) Microsoft решила, что сгенерированные классы будут реализовывать интерфейс System.ComponentModel.INotifyPropertyChanged, поэтому каждый сгенерированный установщик включает в себя вызов RaisePropertyChanged для поддержки этого интерфейса. Это одна из причин, по которой вам нужен полный установщик свойств.

3) Это просто клиентская реализация Microsoft для сервиса. Если вы добавите ссылку на службу из другой среды программирования, вы не получите сгенерированный код, специфичный для платформы .Net. Эта IDE сгенерирует код ссылки на службу в соответствии со своими потребностями.

...