سؤال

انا املك 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 ، الإصدار = 1.0.2617.104 ، الثقافة = محايد ، publickeytoken = 31BF3856AD364E35" أو واحدة من تبعياتها. الدخول محظور.

إذا قمت بتشغيل الطريقة دون الإطار التفاعلي ، فكل شيء على ما يرام.

 Thing item = method();

أي أفكار ما الذي يسبب هذا؟ تتم إضافة جميع مراجع التجميع.

يحرر أود أن أضيف أن التعبير المعني يحتوي على طريقة تنفذ على كائن مُسخر الذي تم إنشاؤه باستخدام MOQ.

هل كانت مفيدة؟

المحلول 2

حسنًا ، تمكنت من تشغيلها ، على الرغم من أنني لم أصل إلى أسفل القضية التي تم رفضها. ربما كان إعادة تشغيل حلها. بعد تجريد الكود الخاص بي مباشرة وإعادة بناءه ، بدأت في الحصول على خطأ مختلف:

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

نصائح أخرى

هل الإطار التفاعلي مثبت للمستخدم الحالي؟ هل لديك وصول القراءة/القابلة للتنفيذ إلى هذا الملف؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top