如何获取导入的MEF功能的汇编信息?

时间:2010-09-30 15:42:42

标签: c# mef .net-assembly

是否可以从导入的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);
}

另一种选择是在元数据中使用硬编码值,但我认为这不可维护。当版本发生变化时,很容易忘记更改这些值。

1 个答案:

答案 0 :(得分:3)

您需要检查func.Value内的类型,而不是Lazy<T,TMeta>包装它。尝试:

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

然而,要意识到这将在此时评估Lazy<T> - 但这是必需的,因为在您评估它之前,尚未构建您尝试获取该类型的对象。