6
votes

MEF: DirectoryPartCatalog

J'essaie d'écrire un simple MEF Démo pour en savoir plus. Je suive Ce didacticiel semble être obsolète. L'exemple téléchargeable fonctionne, mais il utilise un assemblage inclus de 2 versions plus âgées (2008.9.4.0) que l'actuel (4.0) qui est livré avec Framwework 4.

En particulier, il utilise DirectoryPartCatalog que je ne trouve nulle part dans la nouvelle bibliothèque. Quelqu'un pourrait-il fournir un exemple sur la manière de découvrir des assemblages pluggables à partir d'un répertoire avec la version actuelle de MEF?

merci


0 commentaires

3 Réponses :


2
votes

DirectoryPartCatalog est désormais appelé RépertoireCatalog


0 commentaires


6
votes

Vous devez effectuer plusieurs modifications pour rendre cet exemple de compilation et exécuté avec une version intégrée de System.ComponentModel.composition.

class Program
{
    [ImportMany] // [Import]
    public IEnumerable<string> Messages { get; set; }

    [ImportMany] // [Import]
    public IEnumerable<IOutputString> OutputSet { get; set; }

    [Import("OutputMessages")]
    public Action<IEnumerable<IOutputString>, IEnumerable<string>> OutputMessages { get; set; }

    public void Run()
    {

        var catalog = new AggregateCatalog(); // AggregatingComposablePartCatalog
        catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExternalMessages\bin\Debug")); // DirectoryPartCatalog
        catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExtraMessages")); // DirectoryPartCatalog
        catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // AttributedAssemblyPartCatalog
        var container = new CompositionContainer(catalog); // CompositionContainer(catalog.CreateResolver());

        // container.AddPart(this);
        // container.Compose();
        container.ComposeParts(this);

        OutputMessages(OutputSet, Messages);

    }

    static void Main(string[] args)
    {
        Program p = new Program();
        p.Run();
    }
}


2 commentaires

Merci pour cela, cela a résolu beaucoup de mes problèmes.


C'était extrêmement utile! Merci!