2010-08-12 4 views
1

J'utilise MEF pour créer plusieurs instances de la même exportation.Suivi d'instances créées par un conteneur MEF

Je voudrais garder une trace des exemples que je l'ai créé, et je suis soit Interrogation le conteneur ou en utilisant une collection recomposited, mais je ne reçois mes instances ...

Voici le code:

interface IFoo{}; 
[Export(typeof(IFoo)),PartCreationPolicy(CreationPolicy.NonShared)] 
class Foo{}; 

    class FooTracker{ 
    CompositionContainer _container; 
    int HowManyValues() 
    { 
     // this always returns 1 and invokes a constructor 
     return _container.GetExportedValue<IFoo>().Count(); 
    } 

    int HowManyExports(){ 
     // idem 
     return _container.GetExports<IFoo>().Count(); 
    } 

    // idem 
    [ImportMany(AllowRecomposition=true,AllowRecomposition=true)] 
    protected IEnumerable<IFoo> Foos { get; set; } 
    } 

Ce que je voudrais, c'est obtenir les instances déjà existantes, ne pas en créer une nouvelle s'il n'y en a pas.

Merci, Florian

Répondre

1

MEF ne fournit pas cette fonctionnalité. Vous pouvez le faire en demandant à chaque implémentation de IFoo d'importer un IFooTracker et d'appeler une méthode dans IFooTracker pour enregistrer l'IFoo.

+0

+1 Ding ding. Rendre votre IFooTracker statique et IDisposable pour nettoyer les enregistrements, mais c'est la façon dont vous gardez la trace des instances de quoi que ce soit. –

Questions connexes