【发布时间】:2011-10-02 02:09:50
【问题描述】:
我正在尝试使用 MEF 来执行此操作,但可能我使用了错误的技术。
我有 2 个应用程序(现在都有更多想法)一个是我正在转换为 Silverlight 的桌面应用程序。另一个只是适合相同结构的想法。我想将这两个应用程序作为单独的自包含应用程序并从 shell 站点内运行它们。我一直在尝试从 MEF 开始,但我对它的了解还不够,无法知道我做错了什么,或者它不是正确的技术。
目前我使用 MVVM-light 作为我的框架,我在这方面取得了巨大的成功,并且现在对它非常熟悉。我的每个应用程序都是独立的...这意味着如果我将它们设置为从我的网络服务器独立运行,我可以自己使用它们。
当我尝试使用 mef 将它们放入我的 shell 时,问题就出现了。
这是我的第一个模块容器的代码:
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 仅包含一个项目,但最终它将由我的数据、视图模型和客户服务项目组成。但即便如此,它也会崩溃。它似乎不喜欢 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 应用程序,我更喜欢将它放在我的技巧包中。我不喜欢 hocus pocus...IOC 和 Dependency Injection 不在讨论范围内,因为我还不习惯使用该技术,如果我需要使用它,我会找到其他方法来做到这一点。
【问题讨论】:
标签: silverlight-4.0 mvvm mef mvvm-light