Prism中使用MEF的例子
一个基本的例子,没有viewmodel,没有使用Behaviors
大体步骤:
1、创建应用程序
2、使用"Shell"替换"MainWindow"(silverlight替换MainPage)
3、创建Bootstrapper(引导程序)
4、创建模块
5、加入视图
1、创建程序
使用vs 2010创建wpf或silverlight应用程序,添加以下引用
Microsoft.Practices.Prism
Microsoft.Practices.Prism.MefExtensions
System.ComponentModel.Composition
2、修改MainWindow.cs或MainPage.cs为Shell.cs
在代码视图中,右键点MainWindow或MainPage选择重构--〉重命名,命名为Shell
修改App.xaml
wpf程序去掉starturi属性
修改App.xaml.cs
Startup事件中
private void Application_Startup(object sender, StartupEventArgs e)
{
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
导出Shell
[Export]
public partial class Shell : Window
{
public Shell()
{
InitializeComponent();
}
}
3、创建Bootstrapper
添加Bootstrapper类,注意wpf/silverlight在InitializeShell中的区别
using Microsoft.Practices.Prism.MefExtensions;
using System.ComponentModel.Composition.Hosting;
using System.IO;
namespace WpfApplication
{
class Bootstrapper : MefBootstrapper
{
protected override System.Windows.DependencyObject CreateShell()
{
return this.Container.GetExportedValue<Shell>();
}
protected override void InitializeShell()
{
base.InitializeShell();
#if SILVERLIGHT
App.Current.RootVisual = (Shell)this.Shell;
#else
App.Current.MainWindow = (Shell)this.Shell;
App.Current.MainWindow.Show();
#endif
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
//加载自身
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));
//加载目录
if (Directory.Exists("./Modules"))
{
this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("./Modules"));
}
}
}
}
4、创建模块
加入以下引用
Microsoft.Practices.Prism
Microsoft.Practices.Prism.MefExtensions
System.ComponentModel.Composition
加入模块初始化用的类如:MarketModule,实现Initialize
[ModuleExport(typeof(MarketModule))]
public class MarketModule: IModule
{
[Import]
public IRegionManager TheRegionManager { private get; set; }
public void Initialize()
{
TheRegionManager.RegisterViewWithRegion("MarketRegion", typeof(MarketView));
}
}
5、加入视图,并导出
[Export(typeof(MarketView))]
public partial class MarketView : UserControl
{
public MarketView()
{
InitializeComponent();
}
}
6、修改Shell.xaml
加入prism命名空间
xmlns:prism="http://www.codeplex.com/prism"
Grid中加入
<ItemsControl prism:RegionManager.RegionName="MarketRegion"/>
7、应用程序中创建文件夹Modules
在Modules文件中,加入现有项(以链接方式)"模块名称.dll" 如Modules.Market.dll
模块名称.dll,复制到目录属性选择"始终复制"或"如果较新则复制"
转载:http://www.cnblogs.com/ningth/archive/2011/12/04/2275133.html
Prism中使用MEF的例子的更多相关文章
- .NET MEF入门级例子
学习新东西,喜欢从简单的例子入手,感觉理解和上手会快点,本文记录下我做的一个简单的mef的例子,至于理论的话百度,谷歌多的去了. Mef可以在你调整了某些功能的时候不需要重新去做代码,只需要换掉相应的 ...
- 在.NET Core中使用MEF
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软的可托管扩展框架也移植到.NET Core上了. 可托管扩展框架(Managed ...
- Spark(Python) 从内存中建立 RDD 的例子
Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank"," ...
- 【转】MEF程序设计指南一:在应用程序中宿主MEF
在应用程序中宿主MEF其实非常简单,只需要创建一个组合容器对象(CompositionContainer)的实例,然后将需要组合的部件(Parts)和当前宿主程序添加到容器中即可.首先需要添加MEF框 ...
- 在WinRT程序中使用MEF
今天试了一下在WinRT中使用MEF,这里简单的介绍一下步骤. 首先,使用NuGet安装MEF 然后,就可以使用MEF组装插件了,简单的示例如下: interface ILogger { ...
- MEF 编程指南(一):在应用中托管 MEF
在应用程序中托管(Hosing) MEF 涉及到创建组合容器(CompositionContainer) 实例,添加可组合部件(Composable Parts),包括应用程序宿主(Host)本身并进 ...
- php中的一些编程例子
#一到一百不能被三整除的数 for($i=1;$i<=100;$i++){ if($i%3 != 0){ $arr[] = $i; }} var_dump($arr); #水仙花数for($i= ...
- SQL Server 中同时操作的例子:
在SQL 中同一逻辑阶段的操作是同时发生的. 先有一个例子做为带入: declare @x as int =1;declare @y as int =2;set @x=@y;set @y=@x;sel ...
- [shiro学习笔记]第三节 使用myeclipse导入apache shiro中的QuikStart example例子
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40149131 shiro官网:http://shiro.apache.org/ shi ...
随机推荐
- Java 线程池
系统启动一个线程的成本是比较高的,因为它涉及到与操作系统的交互,使用线程池的好处是提高性能,当系统中包含大量并发的线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系 ...
- jQuery jqGrid中ColModel的参数大全
ColModel 是jqGrid里最重要的一个属性,设置表格列的属性. 用法: java 代码: jQuery("#gridid").jqGrid({ ... colMo ...
- VC对ScrollView的调整
VC对ScrollView的调整 automaticallyAdjustsScrollViewInsets automaticallyAdjustsScrollViewInsets是ViewContr ...
- 基于Attribute的Web API路由设置
路由对于MVC应用程序来说都是至关重要的一个部门,不管是asp.net mvc或者Ruby on Rails(当然还有其它的,我只熟悉这两个:) ) asp.net mvc自带的路由配置是在Glob ...
- 自定义底部工具栏及顶部工具栏和Fragment配合使用demo
首先简单的介绍下fragment,fragment是android3.0新增的概念,其中文意思是碎片,它与activity非常相似,用来在一个activity中描述一些行为或一部分用户界面.使用锁个f ...
- NOSQL(一)--Redis
简介 最近开始接触NoSQL,翻译过来就是 not only sql,非关系型数据库吧. 其中主要有四大类NoSQL,今天我们介绍其中的一种键值对的NoSQL:Redis. 定义:Redis是一个开源 ...
- User Word Automation Services and Open XML SDK to generate word files in SharePoint2010
SharePoint 2010 has established a new service called "Word Automation Services" to operate ...
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重 ...
- 如何在开机时让Tomcat以进程的方式启动
一. 安装tomcat服务 1. 打开cmd命令窗口,进入到"tomcat安装路径/bin"目录下,运行"service.bat install"命令,安装to ...
- 烂泥:yum的使用及配置
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近由于服务器需求,需要在公司内网搭建内网yum源. 搭建内网yum源需要分以下几个步骤,如下: 1. yum是什么 2. repo文件是什么 3. r ...