我有一个MethodCallExpression
对象,我试图使用IObservable<Thing>
框架返回Reactive Extensions
个实例。
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,Version = 1.0.2617.104,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。访问被拒绝。
如果我运行没有Reactive框架的方法,一切都很好。
Thing item = method();
任何想法导致了什么?添加所有装配参考。
编辑我应该补充说,有问题的表达式包含一个在使用Moq创建的Mocked对象上执行的方法。
答案 0 :(得分:0)
是否为当前用户安装了反应框架?你有这个文件的读/可执行文件吗?
答案 1 :(得分:0)
我设法让它工作,虽然我从来没有真正到达Access Denied问题的底部。可能是重新启动解决了它。在重新剥离我的代码并重建它之后,我开始得到一个不同的错误:
The object must be a runtime Reflection object
然后我在应用Rx之前更改了代码以将方法调用包装到Action
,这样就可以了:
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);
}