¿Cómo obtener la información de ensamblado de una función MEF importada?
-
26-09-2019 - |
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.
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