Como obter as informações da montagem de uma função MEF importada?
-
26-09-2019 - |
Pergunta
É possível obter as informações de montagem de uma função MEF importada? Preciso saber a versão de montagem e o nome do controle do plug -in que contém a função. Tentei o seguinte, mas ele apenas retorna a versão 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);
}
Outra alternativa seria usar valores codificados nos metadados, mas achei que isso não seria sustentável. Seria fácil esquecer alterar esses valores quando a versão mudou.
Solução
Você precisa verificar o tipo de dentro func.Value
, não o Lazy<T,TMeta>
embrulhando -o. Tentar:
Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();
No entanto, perceba que isso avaliará o Lazy<T>
Neste ponto - mas isso é necessário, porque o objeto em que você está tentando obter o tipo não foi construído até você avaliar isso.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow