2009-11-10 7 views
5

Comment puis-je empêcher de charger des modules MEF doublons dans le cas de la présence de 2 copies de la même Assemblée (peut-être par erreur)Comment éviter les doublons de module avec MEF?

  • Assembly1.dll

  • Assembly2.dll (copie de Assembly1)

    [ImportMany] 
    public IList<IModule> Modules { get; private set; } 
    
    public void BuildUp() 
    { 
        Modules = new List<IModule>(); 
    
        var catalog = new DirectoryCatalog(@".\Modules"); 
        var container = new CompositionContainer(catalog); 
    
        container.ComposeParts(this); 
    } 
    

Répondre

2

Au lieu d'utiliser un DirectoryCatalog, utilisez un AggregateCatalog. Vous devrez écrire du code qui regarde toutes les assemblées dans le répertoire des modules, déterminer si l'actuel est un doublon de celui qu'il a déjà traité, et sinon, crée un AssemblyCatalog pour cet assemblage et l'ajoute à AggregateCatalog. Je ne suis pas sûr exactement quelle logique vous seriez capable d'utiliser pour détecter que deux DLL avec des noms différents sont le "même" ensemble, cependant.

+0

Je dois éviter les duplications de types implémentations de IModule en cours de chargement par MEF. Merci, je vais essayer de cette façon. –