2015-05-06 8 views
0

Я пытаюсь использовать CSLA (последняя версия) вместе с ReactiveUI/Reactive Extensions.Проблема с сериализацией CSLA/ReactiveUI

При создании привязок WPF с использованием reactiveUI (Bind/OneWayBind) и с использованием методов ToProperty представляется, что базовая логика использует Rx Observable.FromEventPattern для привязки к событиям PropertyChanged модели в BindableBase CSLA.

Проблема, которая возникает, заключается в том, что CSLA считает, что эти обработчики должны быть сериализуемыми.

Это определяется кодом в BindableBase,

if (value.Method.IsPublic && 
     (value.Method.DeclaringType.IsSerializable || 
     value.Method.IsStatic)) 
     _serializableChangedHandlers = (PropertyChangedEventHandler) 
     System.Delegate.Combine(_serializableChangedHandlers, value); 
    else 
     _nonSerializableChangedHandlers = (PropertyChangedEventHandler) 
     System.Delegate.Combine(_nonSerializableChangedHandlers, value); 

В этой ситуации метод анонимный делегат создан в реакционно-расширений, где value.Method является публичной и value.Method.DeclaringType является система .Action`2 [[System.Object], System.ComponentModel.PropertyChangedEventArgs]] который имеет IsSerializable == истинный

Это приводит к тому, обработчик будет добавлен в список сериализуемой.

Любые предложения по поводу того, что я мог бы сделать, чтобы эти обработчики не были добавлены к сериализуемым обработчикам?

ответ

0

Похоже, что это ошибка в ReactiveUI. Если их тип не является сериализуемым и не предназначен для потока через AppDomain, процесс или границы сети, тогда он не должен быть помечен как сериализуемый.

+0

Я согласен, что это недостаток в ReactiveUI/ReactiveExtensions. Скорее всего, с моей стороны потребуется немного больше работы, чтобы узнать, где должна быть объявлена ​​несериализация. –