كيف تحصل على معلومات التجميع الخاصة بوظيفة MEF المستوردة؟

StackOverflow https://stackoverflow.com/questions/3832278

  •  26-09-2019
  •  | 
  •  

سؤال

هل من الممكن الحصول على معلومات التجميع من وظيفة MEF المستوردة؟ أحتاج إلى معرفة إصدار التجميع واسم التحكم المكون الإضافي الذي يحتوي على الوظيفة. جربت ما يلي ، لكنه يعيد فقط إصدار System.componentModel.composition.

foreach (Lazy<Func<int>, IMetadata> func in PluginFuncs)
{
    // get assembly information of the Plugin control for the imported function 
    string version = func.GetType().Assembly.GetName().Version.ToString();
    Console.WriteLine(version);
}

هناك بديل آخر هو استخدام القيم المتشددين في البيانات الوصفية ، لكنني اعتقدت أن هذا لن يكون قابلاً للصيانة. سيكون من السهل نسيان تغيير هذه القيم عند تغير الإصدار.

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

المحلول

تحتاج إلى التحقق من النوع من الداخل func.Value, ، ليس Lazy<T,TMeta> لفها. محاولة:

Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();

ومع ذلك ، أدرك أن هذا سيقيم Lazy<T> في هذه المرحلة - ولكن هذا مطلوب ، لأن الكائن الذي تحاول الحصول على النوع لم يتم بناؤه حتى تقوم بتقييم ذلك.

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