Я работаю над приложением в Silverlight 4 RC, и я беру оппонент, чтобы изучить MEF для управления элементами управления плагинами. У меня это работает в довольно простой усадьбе, но это не совсем аккуратно, и я знаю, что есть лучший способ импортировать несколько xap.MEF + SL4 вопрос
По существу, в App.xaml моего хозяина приложения, у меня есть следующий красноречивый MEF, чтобы загрузить мой XAP-х:
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();
Я уверен, что я не использую в AggregateCatalog полностью здесь и Мне нужно иметь возможность загружать любые xap-файлы, которые могут находиться в каталоге, а не только жестко кодировать Uri, очевидно ....
Кроме того, в MainPage.xaml.cs на хосте у меня есть следующая коллекция, которую MEF ставит плагин в:
[ImportMany(AllowRecomposition = true)]
public ObservableCollection<IPlugInApp> PlugIns { get; set; }
Опять же, это работает, но я уверен, что я использую ImportMany неверно ....
Наконец, файл MainPage.xaml.cs реализует IPartImportsSatisfiedNotification и я следующий для обработки после загрузки плагина:
public void OnImportsSatisfied()
{
sp.Children.Clear();
foreach (IPlugInApp plugIn in PlugIns)
{
if (plugIn != null)
sp.Children.Add(plugIn.GetUserControl());
}
}
Это работает, но это, кажется, нечисто, что он работает в п раз (п быть числом XAP-х годов для загрузки). У меня называть sp.Children.Clear(), как если бы я не при загрузке, мой стек панели 2 плагина заполняется следующим образом:
TestPlugIn TestPlugIn TestPlugIn B
Мне явно что-то не хватает. Может ли кто-нибудь указать, что я должен делать? Спасибо!
Спасибо, это в значительной степени то, с чем я пошел, и, похоже, все в порядке для моих нужд –