Как получить сборку информацию о импортированной функции МЭФ?

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

  •  26-09-2019
  •  | 
  •  

Вопрос

Возможно ли получить информацию об сборке из импортированной функции MEF? Мне нужно знать версию сборки и имя элемента управления плагином, который содержит функцию. Пробовал следующее, но он просто возвращает версию System.comPonentModel.

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