2010-12-07 68 views
2

Il est possible que si nous créons manuellement un FileSystemWatcher et regardez le répertoire « parties » (ici quelques de dll dans le dossier) et le suivi des modifications, nous refléter les changements dans un récipient ce qui permet la recomposition.conteneur MEF mise à jour automatique à l'aide d'un répertoire catalogue

MEF prend en charge la mise à jour automatique lorsque le Container utilise un DirectoryCatalog et le automatiquement pour nous?

Répondre

5

Vous devez appeler la méthode Refresh de DirectoryCatalog pour qu'il se mette à jour avec du nouveau contenu. Cela déclenchera la recomposition dans tous les conteneurs reliés au catalogue. Vous pouvez créer un FileSystemWatcher et appeler la méthode Refresh lorsque quelque chose change.

+0

Je l'ai fait comme vous le dites et tout est OK avec de nouvelles pièces mais je ne peux pas remplacer les pièces existantes. Il semble que MEF a mis un verrou sur mes DLLs. Comment remplacer dynamiquement des parties (chaque partie dans une seule DLL dans le dossier des plugins)? merci – Xaqron

+0

@Xaqron C'est .NET qui a un verrou sur vos DLL. Vous ne pouvez pas décharger les assemblys d'un AppDomain, et pendant qu'ils sont chargés, il y aura normalement un verrou. Vous pouvez activer la copie miroir pour l'AppDomain pour vous permettre de supprimer les DLL. Ils seraient toujours chargés, mais DirectoryCatalog verrait qu'ils étaient partis lorsque vous avez appelé Actualiser et les supprimer du catalogue. –