2010-12-11 4 views
2

La plupart du temps, nous importons une exportation sans condition. Je souhaite importer certaines configurations. quelque chose comme ceci:Comment importer une pièce en passant un paramètre à exportateur dans MEF?

[Import(typeof(System.Configuration.Configuration))] 
private Configuration config 
{ 
    get; 
    set; 
} 

Le problème est à l'exportation Je dois passer un paramètre pour obtenir la bonne configuration. Voici la fonction exportée:

[Export(typeof(System.Configuration.Configuration))] 
private Configuration GetConfig(String name) 
{ 
    // Load proper configuration and return it 
} 

Ma question est de savoir comment passer un paramètre du côté import, à la fonction exportée. Notez que j'utilise la fonction exportée (qui accepte un paramètre) dans le constructeur de mon importateur.

Répondre

6

Ce que vous pouvez faire, c'est utiliser Func<T, U> et MEF s'occupera du délégué pour vous. Par exemple:

public class FirstClass 
{ 
    [Export("Method")] 
    public string Method(string arg) 
    { 
    return arg.ToUpperInvariant(); 
    } 
} 

public class SecondClass 
{ 
    [Import("Method")] 
    public Func<string, string> Func; 
} 

Dans cet exemple, je suis l'exportation d'un contrat dont le nom et le MEF détermine automatiquement comment câbler le délégué cible pour moi. Je pourrais aussi avoir Export comme Func<string, string>.

Donc, dans votre cas, je changerais votre Export à:

[Export("GetConfiguration")] 

Et votre Import et cible bien à:

[Import("GetConfiguration")] 
public Func<string, Configuration> GetConfig { get; set; } 

Et il suffit d'utiliser le délégué pour exécuter la fonction importée.

Espérons que ça aide.

Questions connexes