Как получить информацию о сборке импортированной функции MEF? - PullRequest
3 голосов
/ 30 сентября 2010

Можно ли получить информацию о сборке из импортированной функции MEF? Мне нужно знать версию сборки и имя элемента управления Plugin, который содержит функцию. Попробовал следующее, но он просто возвращает версию 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 Ответ

3 голосов
/ 30 сентября 2010

Вам необходимо проверять тип изнутри func.Value, а не Lazy<T,TMeta>, обертывающего его. Попробуйте:

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

Однако, поймите, что это оценит Lazy<T> на данный момент - но это необходимо, потому что объект, где вы пытаетесь получить тип, не был сконструирован, пока вы не оцените это.

...