初学Prism、MEF应用陷阱例一
转自 http://www.189works.com/article-42722-1.html
?
最近熟悉了一下Prism框架,将自己理解的主要知识点分为如下:
1、BootStrapper-启动引导
2、Region-区域
3、Module-模块
4、Aggregate-聚合事件
5、MVVM
?
根据Prism的QuikStart 以及网上诸多的示例,应用,我们很快便能理解其中的一些知识,并且非常跃跃欲试!
?
经过一翻学习、运行示例之后…………… 开始了自己的第一个Prism应用;
?
按照学习到的知识:
首先、我们新建项目、创建一个Shell 并且标记[Export]
Technorati 标签: 其实我也想不明白为什吗Prism的开发团队会不在基类中默认添加自身程序集的Catalog呢,也许有些应用并不需要Aggregate这类东西,那就让初学者掉入陷阱!?
好了, 问题分析清楚了,解决办法就是将自身程序集Catalog注册到Container中去就可以了,
示例:
protected override void ConfigureAggregateCatalog(){base.ConfigureAggregateCatalog();//加载自身this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));//加载ViewModel所在Assemblythis.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ShellViewModel).Assembly));//加载Modules目录if (Directory.Exists("./Modules")){this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("./Modules"));}}?
?
先分享下自己的应用选型, 选择Prism框架的Module\Region\Aggregate功能,当然包含了MEF; 选择SimapleMVVM的MVVM功能;
然后是后话,Prism非常不错的框架,我们现在不管高手、菜鸟 开发的时候都在应用好的设计模式,好的开发方法 和 好的架构;
但是技术更新迅速的同时我们大都是草草了解其使用并直接应用,有时候可能没有完全理解其精粹;拿prism来说,作为企业开发框架,主打功能就是解耦、解耦的方法就是依赖注入,再一个就是设计模式;
?
我们使用prism的完全可以将项目拆分为很多小的工作模块去开发, 目前我的项目中就这样,UI就是纯UI ViewModel单独项目且Export 并且将程序集添加到Prism的Container供UI层去Import
然后ViewModel在通过 IService从Core模块中获取服务,
然后利用ServiceLocator 或者 prism 在任意地方去Import 就可以做很多工作了, 之前做WPF都是将ViewModel在View.xaml中去绑定或者写到资源里,
?
现在我更喜欢这样:
[Import]public ShellViewModel ViewModel{get{return (ShellViewModel)this.DataContext;}set{this.DataContext = value;}}?
?
结尾:对Prism的学习和应用才刚开始,有新的理解和问题我会继续和大家分享 ;另外我现在的项目为C/S分布式应用,服务端EF+WCF+WindowsService, 客户端WPF+WCF ,设计过程和解决问题的过程中也有很多有意思的东西,有时间的话我也会分享出来,供朋友们学习交流!