Question

Est-il possible obtenir les informations de montage d'une fonction importée MEF? Je dois connaître la version de montage et le nom du contrôle Plugin qui contient la fonction. Essayé ce qui suit, mais il retourne juste la version 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);
}

Une autre alternative serait d'utiliser des valeurs codées en dur dans les métadonnées, mais je pensais que ce ne serait pas maintenable. Il serait facile d'oublier de changer ces valeurs lorsque la version modifiée.

Était-ce utile?

La solution

Vous devez vérifier le type de l'intérieur func.Value, et non l'emballage Lazy<T,TMeta> il. Essayez:

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

Cependant, rendons compte que ce évaluera la Lazy<T> à ce moment -. Mais cela est nécessaire, parce que l'objet où vous essayez d'obtenir le type n'a pas construit jusqu'à ce que vous évaluez que

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top