Я пытаюсь использовать 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 == истинный
Это приводит к тому, обработчик будет добавлен в список сериализуемой.
Любые предложения по поводу того, что я мог бы сделать, чтобы эти обработчики не были добавлены к сериализуемым обработчикам?
Я согласен, что это недостаток в ReactiveUI/ReactiveExtensions. Скорее всего, с моей стороны потребуется немного больше работы, чтобы узнать, где должна быть объявлена несериализация. –