Как получить сборку информацию о импортированной функции МЭФ?
-
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>
На данный момент - но это требуется, потому что объект, в котором вы пытаетесь получить тип, не будет построен, пока вы не оцениваете это.
Не связан с StackOverflow