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 ...
随机推荐
- [Android] android .keystore文件转x509pem工具
.keystore是android的签名文件,最近在做联通联运的时候,发现他们需要上传x509pem格式的文件来签名所以就研究了一下如何转化 方法一:使用openssl的方法 http://blog. ...
- 分享php工作中遇到的一些探究和技巧【1】
一 foreach的引用 $arr = range(,); //[1,2,3] foreach($arr as &$val) { } foreach($arr as $val) { } pri ...
- 天书笔记:HTML+CSS实现顶部导航栏
此笔记纯属本人脑残笔记,阅读困难不理解属正常现象,初学者尽量不要阅读,否则轻则口吐白沫重则走火入魔,切记切记 先晒效果图: 效果要求类似于b站的顶部导航(..原谅我老是拿b站做例子:) ) 然后是代码 ...
- JavaScript Patterns 5.3 Private Properties and Methods
All object members are public in JavaScript. var myobj = { myprop : 1, getProp : function() { return ...
- HBase应用开发回顾与总结系列之三:RowKey行键生成器工具
所谓RowKey行键生成器,是指通过软件工具制定行键生成策略,并可将策略信息保存成本地策略文件,待需要时再将本地策略文件序列化成行键生成策略对象,传入数据行信息后可自动生成RowKey行键. 那么 ...
- Linux IPC tcp/ip socket 编程
模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...
- 从Mysql数据库中导入导出表结构
1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定:[root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modif ...
- linux centos使用xrdp远程界面登陆
redhat6 安装xrdp 直接使用windows远程桌面连接登陆 下面介绍实现方法: 第一步:下载源码包,并安装一些依赖的软件下载xrdp源码包 wget http://downloads.so ...
- MT7620a openwrt barrier_breaker编译后wan口dhcp无法获得地址
前言 我司准备使用openwrt barrier_breaker版本做二次开发.在烧入固件后发现wan口,dhcp无法获得地址.经如下修改后,mt7620a的路由器可以正常获得地址. 修改dts文件 ...
- Codeforces 486E LIS of Sequence --树状数组求LIS
题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类: 1.不属于任何一个最长子序列 2.属于其中某些但不是全部最长子序列 3.属于全部最长子序列 解法: 我们先求出dp1[i] ...