كيف تحصل على معلومات التجميع الخاصة بوظيفة MEF المستوردة؟
-
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>
في هذه المرحلة - ولكن هذا مطلوب ، لأن الكائن الذي تحاول الحصول على النوع لم يتم بناؤه حتى تقوم بتقييم ذلك.
لا تنتمي إلى StackOverflow