2010-09-30 4 views
2

Est-il possible d'obtenir les informations d'assemblage à partir d'une fonction MEF importée? J'ai besoin de connaître la version de l'assembly et le nom du contrôle Plugin qui contient la fonction. J'ai essayé ce qui suit, mais il retourne juste la version System.ComponentModel.Composition.Comment obtenir les informations d'assemblage d'une fonction MEF importée?

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 a changé.

Répondre

2

Vous devez vérifier le type à l'intérieur de func.Value, pas le Lazy<T,TMeta> l'enveloppant. Essayez:

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

Cependant, se rendre compte que cela évaluera la Lazy<T> à ce stade - 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 cela.

+0

Merci pour la suggestion, mais maintenant il retourne la version pour mscorlib. D'autres idées? –

+0

@John_Sheares: Oh, putain - cela a du sens - Func est System.Func ... mmm ... laissez-moi penser –

+0

@John_Sheares: Je crois que ce qui précède va maintenant fonctionner. En affectant à un délégué, vous pouvez obtenir le type sur lequel la méthode est définie via MethodInfo retourné dans Delegate.Method. –

Questions connexes