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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top