使用 MEF 公开 Silverlight MVVM 应用程序中的接口

  下载代码示例

  许多开发人员可能都将 Silverlight 视为以 Web 为中心的技术,但实际上,它已经成为构建任何应用程序的优秀平台。 Silverlight 本身就支持许多概念,例如数据绑定、值转换器、导航、浏览器外操作和 COM 互操作,因此它可以相对直观简便地创建任何种类的应用程序。 我说的是“任何种类”,其中当然也包括企业级应用程序。

  利用 Model-View-ViewModel (MVVM) 模式来创建 Silverlight 应用程序,这使您除了能够使用 Silverlight 中已有的功能以外,还能获得更强的可维护性、可测试性以及用户界面与其背后的逻辑之间的可分离性。 当然,您不需要完全靠自己来解决所有问题。 有很多信息和工具可以帮助您入门。 例如,MVVM Light Toolkit (mvvmlight.codeplex.com) 是一款轻量级框架,用于通过 Silverlight 和 Windows Presentation Foundation (WPF) 来实现 MVVM;借助代码生成,WCF RIA 服务 (silverlight.NET/getstarted/riaservices) 可帮助您轻松访问 Windows Communication Foundation (WCF) 服务和数据库。

  利用托管可扩展性框架 (mef.codeplex.com)(简称为 MEF),您可以进一步扩展 Silverlight 应用程序。 此框架提供了探测功能,可利用组件和复合创建可扩展的应用程序。

  在本文的其余部分,我将介绍如何使用 MEF 来集中管理 View 和 ViewModel 创建工作。 当您获得此工具之后,所能做到的就不只是将 ViewModel 放入 View 的 DataContext 中了。 所有这些都将通过自定义内置的 Silverlight 导航来实现。 当用户导航到给定的 URL 时,MEF 会拦截此请求,查看路线(有点类似于 ASP.NET MVC),查找匹配的 View 和 ViewModel,通知 ViewModel 发生了什么,然后显示 View。

  Getting Started with MEF

  由于 MEF 是将本示例中所有部分都连接起来的引擎,因此最好从它开始。 如果您还不熟悉 MEF,请先阅读 Glenn Block 的文章“在 .NET 4 中使用托管可扩展性框架构建可组合的应用程序”,该文章发表在 MSDN 杂志 的 2010 年 2 月号上 (msdn.microsoft.com/magazine/ee291628)。

  首先,您需要处理 App 类的 Startup 事件,以便在应用程序启动时正确配置 MEF:

private void OnStart(object sender, StartupEventArgs e) {
// Initialize the container using a deployment catalog.
var catalog = new DeploymentCatalog();
var container
= CompositionHost.Initialize(catalog);
// Export the container as singleton.
container.ComposeExportedValue<CompositionContainer>(container);
// Make sure the MainView is imported.
CompositionInitializer.SatisfyImports(this);
}

NET技术使用 MEF 公开 Silverlight MVVM 应用程序中的接口,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。