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崩溃,而线程池的最大线程数参数可以控制系 ...
- Asp.net Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则 (多级路由) 如:Admin/Test/Index
http://blog.csdn.net/buhuan123/article/details/26387427 目录(?)[-] 1那么我们再来看我们需要的访问方式如下图 razor视图的地址写成通配 ...
- 网络编程4--毕向东java基础教程视频学习笔记
Day24 06 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服 ...
- 避坑宝典:如何选择HTML5游戏引擎
原生手游市场已是红海,腾讯.网易等寡头独霸天下,H5游戏市场成为下一个风口.据笔者所知,很多H5游戏开发团队由于选择引擎不慎导致项目甚至团队夭折. 如何选择适合团队和项目的引擎,笔者通过学习和项目实践 ...
- html5+css3实现跑动的爱心/动态水滴效果[原创][5+3时代]
大风起兮云飞扬,安得猛士兮走四方!html5+css3,不学不行. 做web开发已经有好几年了,见证了太多语言的崛起和陨落. 其实作为一个程序员最苦逼的事情莫过于每天要不停的追赶各大公司新出的框架和语 ...
- ELF Format 笔记(五)—— 特殊 Section
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 链接器把一些独立的 object files 和库文件链接起来,形成可执行文件.在这个过程中,链接器需要解决 ...
- C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define
ilocker:关注 Android 安全(新手) QQ: 2597294287 #define ASPECT_RATIO 1.653 记号 ASPECT_RATIO 不会进入 symbol tabl ...
- Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)
以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...
- [转]ASP.NET MVC Dynamic Themes
本文转自:http://www.codeproject.com/Articles/32847/ASP-NET-MVC-Dynamic-Themes Download source code - 148 ...
- vlan协议及端口类型
一.VLAN协议 1.协议的应用 802.1Q协议,即Virtual Bridged Local Area Networks协议,主要规定了VLAN的实现. 2.协议结构 每一个支持802.1Q协议的 ...