Silverlight项目笔记4:初识Prism以及IoC

1.Prism

    Prism是由微软Patterns & Practices团队开发的针对WPF和Silverlight的MVVM框架。

    Prism的几个关键点:

   (1)启动器类UnityBootstrapper

        Silverlight程序入口处调用Bootstrapper.Run方法时,Prism会自动做一些初始化工作,包括读取模块信息表,创建模块类实例并初始化(还可以选择按需加载模式OnDemand),以及在CreatShell中指定整个程序的根视图。    

      

      

    (2)继承IModule接口,进行模块初始化工作。 

       构造函数中传入UnityContainer容器(使用了IoC容器Unity),即可获得容器对象,后面需要大量使用UnityContainer对象的Resolve方法来获取指定对象关联的对象,即直接使用容器对象container来获取实例或方法。

       然后在Initialize中做一些模块相关的初始化工作,比如监听事件消息,当载入本模块时,界面需要做一些什么工作等等。

      

   (3)UI管理RegionManager

     之前在模块初始化时说到界面需要做一些初始化工作,使用Prism框架,可以很方便的进行UI控件的切换导航。

     在模块初始化的时候将需要用到的页面进行注册,当需要加载的时候就可以直接将页面加载到指定的区域。

     下图即是在模块初始化时注册了某一个页面“XXXMainView”,当监听到加载页面的事件时,就可以将其加载到之前设计好的页面区域“Page Region”。

     

   (4)事件聚合服务EventAggregator

      Prism提供了事件聚合服务EventAggregator,使用起来比委托事件更方便,注册事件,然后直接发布订阅即可,模块之间的通信中将大量用到。

     

     

      

 

2.IoC容器Unity

     IoC即Inversion of Contro控制反转,将代码的控制权交由系统控制,比如对象的创建、方法的调用都交给Unity进行控制,Unity也是由微软patterns& practices团队用C#实现的轻量级、可扩展的依赖注入容器,这样做的好处是消除模块间的直接依赖,面向抽象即使面向接口编程,方便程序的扩展维护。

     使用UnityContainer的容器对象,即图中的m_Container、container,将对象与对象之间的关系进行注册后(IDataService与XXXDataService),就可以在整个程序任意地方再通过容器对象解析出该注册对象,进而执行该注册对象的属性或方法,

这也是除了事件聚合服务EventAggregator外,模块之间进行通信的另一办法。

     

       

     

 

3.使用Prism及IoC的好处

   (1) 功能模块化,将系统划分为多个独立模块,方便多人协同开发;

   (2)有效减少程序大小,模块化开发方式加上IoC,面向接口编程,模块各司其职,使得模块重复引用类库情况大为减少,编译出来的程序更小,对于Silverlight这种富客户端,提高了加载速度。

   (3)层次逻辑更加清晰,便于开发;

   (4)模块之间低耦合,当模块没有更新时,可以unload,不需要重新编译,大幅减少编译时间。

   (5)增强扩展维护性。

    所以系统有一定复杂程度后,非Demo或原型系统时,采用Prism以及IoC会是一个很好的选择。

 

posted @ 2014-08-18 00:53  colinhou  阅读(2249)  评论(2编辑  收藏  举报