Я пытаюсь использовать MEF для этого, но, возможно, я использую неправильную технологию.
У меня есть 2 приложения (оба - больше идей прямо сейчас). Одно из них - настольное приложение, которое я конвертирую в Silverlight. Другая - это просто идея, которая вписывается в ту же структуру. Я хочу взять оба приложения как отдельные автономные приложения и запускать их из оболочки сайта. Я пытался начать это с MEF, но пока не знаю достаточно об этом, чтобы понять, делаю ли я что-то не так, или это не правильная технология.
В настоящее время я использую MVVM-light в качестве фреймворка, я добился большого успеха в этом и уже довольно хорошо знаком с ним. Каждое из моих приложений автономно ... это означает, что я могу использовать их самостоятельно, если я настрою их запуск с автономного веб-сервера.
Проблема возникает, когда я пытаюсь вставить их в свою оболочку, используя mef.
Это код моего первого модуля-контейнера:
public partial class MEFDoctorsModuleContainer : Page, IPartImportsSatisfiedNotification
{
private System.Uri _requestedUri;
public MEFDoctorsModuleContainer()
{
InitializeComponent();
}
[Import]
public IDeploymentCatalogService CatalogService { get; set; }
[ImportMany(AllowRecomposition = true)]
public Lazy<UserControl, IMetadataContent>[] MEFModuleList { get; set; }
// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
_requestedUri = e.Uri;
CompositionInitializer.SatisfyImports(this);
}
public void OnImportsSatisfied()
{
CatalogService.AddXap("WavelengthIS.Referee.PhysicianMaster.xap");
//MEFModuleList.ToList()
// .ForEach(module =>
// {
// if ((module.Metadata.ContainerType == this.GetType().ToString() &&
// (module.Value.GetType().ToString() == "WavelengthIS.Referee.PhysicianMaster.MainPage.xaml")))
// {
// content.Items.Add(module.Value);
// }
// });
MEFModuleList.ToList()
.ForEach(delegate(Lazy<UserControl, IMetadataContent> module)
{
if ((module.Metadata.ContainerType == this.GetType().ToString() && (module.Value.GetType().ToString() == "WavelengthIS.Referee.PhysicianMaster.App.xaml")))
content.Items.Add(module.Value);
});
}
}
}
В настоящий момент xap состоит только из одного проекта, но в конечном итоге он будет состоять из моих данных, ViewModel и сервисных проектов для клиента. Но даже тогда это терпит крах. Это, кажется, не нравится viewmodellocator.
(module.Value.GetType().ToString() == "WavelengthIS.Referee.PhysicianMaster.App.xaml")))
раньше равнялся
(module.Value.GetType().ToString() == "WavelengthIS.Referee.PhysicianMaster.MainPage.xaml")))
Но я думал, что это не сработает, потому что я импортирую приложение, а не просто страницу.
поэтому мой вопрос такой: Учитывая то, что я пытаюсь сделать, какие мои лучшие варианты сделать эту работу?
Я не застрял в MEF, но мне требуется приложение Shell, которое загружает в него автономные приложения, используя навигационную среду, которая находится в SL4. Я требую, чтобы MVVM-Light работал, потому что мне очень нравится этот фреймворк, и хотя я написал приложения для MVVM Enterprise без него, я предпочитаю иметь его в своем арсенале трюков. Мне не нравится фокус-фокус ... IOC и Dependency Injection не обсуждаются, потому что мне пока не удобно пользоваться этой технологией, и если мне нужно ее использовать, я найду другой способ сделать это.