Pregunta

¿Es posible obtener la información de ensamblado de una función MEF importada? Necesito saber la versión de ensamblado y el nombre del control de plugin que contiene la función. Probamos el siguiente, pero sólo devuelve la versión 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);
}

Otra alternativa sería el uso de valores codificados en los metadatos, pero pensé que esto no sería fácil de mantener. Sería fácil olvidarse de cambiar estos valores cuando la versión cambiada.

¿Fue útil?

Solución

Es necesario comprobar el tipo de dentro func.Value, no el envoltorio Lazy<T,TMeta> ella. Proveedores:

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

Sin embargo, se dan cuenta de que esto va a evaluar la Lazy<T> en este punto -. Pero esto es necesario, porque el objeto en el que está tratando de obtener el tipo no se puede construir hasta que se evalúe que

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top