MethodCallExpression с IObservable генерирует исключение из-за отсутствия доступа в System.CoreEx - PullRequest
1 голос
/ 06 октября 2010

У меня есть объект MethodCallExpression, из которого я пытаюсь вернуть экземпляр IObservable<Thing>, используя Reactive Extensions framework.

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression)
{
   Func<Thing> method = expression.Compile()
   var observable = Observable.FromAsyncPattern<Thing>(method.BeginInvoke, method.EndInvoke);
   IObservable<Thing> observable = observable();
   return observable;
}

Проблема заключается в том, что при выполнении этого я получаю следующееисключение во время выполнения для observable():

Не удалось загрузить файл или сборку 'System.CoreEx, версия = 1.0.2617.104, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35' или одна из его зависимостей.Доступ запрещен.

Если я запускаю метод без Reactive framework, все в порядке.

 Thing item = method();

Любые идеи, что вызывает это?Добавлены все ссылки на сборки.

Редактировать Я должен добавить, что рассматриваемое выражение содержит метод, который выполняется на объекте Mocked, созданном с использованием Moq.

Ответы [ 2 ]

0 голосов
/ 07 октября 2010

Ну, мне удалось заставить его работать, хотя я так и не дошел до сути проблемы «Отказано в доступе».Это, возможно, была перезагрузка, которая разрешила это.После удаления моего кода и его повторной сборки я начал получать другую ошибку:

The object must be a runtime Reflection object

Затем я изменил код для переноса на вызов метода в Action перед применением Rx, и это сработало:

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression)
{
   var method = expression.Compile();
   Func<Thing> = () => method();
   var observable = Observable.FromAsyncPattern<Thing>(method.BeginInvoke, method.EndInvoke);
   return observable();
}

Для записи я смог уменьшить это еще:

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression)
{
   var method = expression.Compile();
   Func<Thing> action = () => method();
   return Observable.Start(action);
}
0 голосов
/ 06 октября 2010

Установлен ли реактивный каркас для текущего пользователя?у вас есть доступ на чтение / исполнение к этому файлу?

...