Come ottenere le informazioni di assemblaggio di una funzione MEF importato?
-
26-09-2019 - |
Domanda
E 'possibile ottenere le informazioni di montaggio da una funzione di MEF importato? Ho bisogno di sapere la versione del montaggio e nome del controllo Plugin che contiene la funzione. Ho provato quanto segue, ma solo restituisce la versione 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);
}
Un'altra alternativa sarebbe quella di utilizzare i valori hardcoded nei metadati, ma ho pensato che questo non sarebbe gestibile. Sarebbe facile dimenticare di modificare tali valori quando la versione modificata.
Soluzione
È necessario verificare il tipo dall'interno func.Value
, non l'involucro Lazy<T,TMeta>
esso. Prova:
Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();
Tuttavia, rendersi conto che questo valuterà la Lazy<T>
a questo punto -. Ma questo è necessario, perché l'oggetto in cui si sta cercando di ottenere il tipo non è essere costruito fino a quando si valuta che