2010-07-20 4 views
3

J'ai codé un service comme ça:Comment importer plusieurs instances avec MEF?

public interface IMyInterface 
{ 
    ... 
} 

[Export(typeof(IMyInterface))] 
internal class MyService : IMyInterface 
{ 
    ... 
} 

Maintenant, je voudrais importer plusieurs cas de MyService avec dans mon programme MEF principal.

Comment puis-je faire cela?

Avec [Import] private IMyInterface MyService { get; set; } Je reçois seulement 1 instance de MyService. Dans mon programme principal, je voudrais spécifier dynamiquement le nombre d'instance importée de MyService avant la composition MEF.

Je ne souhaite pas utiliser [ImportMany] car je ne souhaite pas spécifier le nombre d'exportations dans mon implémentation MyService.

Pouvez-vous m'aider?

Répondre

6

Vous ne voulez probablement pas faire cela comme des importations droites, mais obtenir plusieurs fois la valeur exportée du conteneur. À cause de cela, vous devez modifier la stratégie de création à NonShared, ce qui oblige le conteneur à instancier une nouvelle instance à chaque fois.

[Export(typeof(IMyInterface)) PartCreationPolicy(CreationPolicy.NonShared)] 
internal class MyService : IMyInterface 
{ 
    ... 
} 

ensuite obtenir la valeur du conteneur:

List<IMyInterface> instances = new List<IMyInterface>(); 
for (int i = 0; i < 10; i++) { 
    instances.Add(container.GetExportedValue<IMyInterface>()); 
} 
+0

Merci, c'est exactement ce que je avais besoin ;-). –

+1

@Patrice Il est généralement préférable d'utiliser ExportFactory au lieu d'appeler plusieurs fois le conteneur. Voir cette réponse: http://stackoverflow.com/questions/3285469/loading-plugins-at-runtime-with-mef/3286167#3286167 –

Questions connexes