Wie die Montage Informationen eines importierten MEF-Funktion zu bekommen?
-
26-09-2019 - |
Frage
Ist es möglich, die Montage Informationen aus einer importierten MEF-Funktion bekommen? Ich brauche die Assemblierung-Version und den Namen der Plugin Steuerung kennen, die die Funktion enthält. Versucht, die folgenden, aber es gibt nur die System.ComponentModel.Composition Version.
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);
}
Ein andere Alternative wäre, fest einprogrammierte Werte in den Metadaten zu verwenden, aber ich dachte, das nicht wartbar sein würde. Es wäre leicht, zu vergessen, diese Werte zu ändern, wenn die Version geändert.
Lösung
Sie müssen die Art von innen func.Value
zu prüfen, nicht der Lazy<T,TMeta>
Verpackung es. Versuchen Sie:
Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();
Allerdings erkennt, dass dies die Lazy<T>
an dieser Stelle bewerten wird -. Aber dies erforderlich ist, weil das Objekt, in dem Sie die Art zu erhalten versuchen, nicht gebaut werden, bis Sie dieses auswerten