Je travaille sur une application dans le Silverlight 4 RC et je prends l'oppertunity pour apprendre MEF pour la gestion des contrôles de plugin. Je l'ai fait fonctionner dans un manoir assez basique, mais ce n'est pas vraiment bien rangé et je sais qu'il existe une meilleure façon d'importer plusieurs xap.MEF + SL4 question
Essentiellement, dans le App.xaml de mon application hôte, j'ai le MEF telling suivante pour charger mon xap de:
AggregateCatalog catalog = new AggregateCatalog();
DeploymentCatalog c1 = new DeploymentCatalog(new Uri("TestPlugInA.xap", UriKind.Relative));
DeploymentCatalog c2 = new DeploymentCatalog(new Uri("TestPlugInB.xap", UriKind.Relative));
catalog.Catalogs.Add(c1);
catalog.Catalogs.Add(c2);
CompositionHost.Initialize(catalog);
c1.DownloadAsync();
c2.DownloadAsync();
Je suis sûr que je ne suis pas en utilisant pleinement ici la AggregateCatalog et Je dois pouvoir charger n'importe quel xap qui pourrait être dans le répertoire, pas seulement Uri de codage en dur évidemment ....
Aussi, dans le MainPage.xaml.cs dans l'hôte j'ai la collection suivante que MEF met le le plugin est:
[ImportMany(AllowRecomposition = true)]
public ObservableCollection<IPlugInApp> PlugIns { get; set; }
Encore une fois, cela fonctionne, mais je suis sûr que je utilise ImportMany mal ....
Enfin, le fichier MainPage.xaml.cs implémente IPartImportsSatisfiedNotification et je donne les résultats suivants pour le traitement une fois le plug-in de chargé:
public void OnImportsSatisfied()
{
sp.Children.Clear();
foreach (IPlugInApp plugIn in PlugIns)
{
if (plugIn != null)
sp.Children.Add(plugIn.GetUserControl());
}
}
Cela fonctionne, mais il semble sale qu'il fonctionne n fois (n étant le nombre de années XAP à charge). Je vais avoir à appeler sp.Children.Clear() comme si je ne suis pas, lors du chargement, mon panneau de pile du 2 plug-in est peuplé comme suit:
TestPlugin A TestPlugin A TestPlugin B
Il me manque clairement quelque chose ici. Quelqu'un peut-il indiquer ce que je devrais faire? Merci!
Merci, c'est à peu près ce que je suis allé et semble être OK pour mes besoins –