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.

Foi útil?

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
scroll top