zoukankan      html  css  js  c++  java
  • Prism框架研究(三)

      这一篇主要用来介绍一下基于Prism Library中的核心服务以及如何配置Container,还有一个重要的部分是如何管理各个组件之间的依赖性,下面就这些内容来做一一的介绍。

      1 Prism中的核心服务

               IModuleManager:为能够检索和初始化应用程序的各个模块的服务定义接口。

        IModuleCatalog:包含一个应用程序各个模块的元数据,这个Prism Libray几种不同的Catalog。

        IModuleInitializer:初始化应用程序的各个模块。

        IRegionManager:注册和检索regions(姑且理解成视图区域),这些对于整个布局来说都是可视化的容器。

        IEventAggregator:它是一个事件的发布者和订阅者之间的松散耦合的一个事件的集合。

        ILoggerFacade:它是一个记录机制的一个包装器,因此你可以选择你自己的记录机制,当容器使用Bootstrapper的Run方法的时候,这个记录服务就会被注册,并且使用container注册另外一个记录器(logger)是无效的。

        IServiceLocator:允许你通过Prism Library来获取容器,如果你想定制或者扩展当前Prism Libray,这将是非常有用的。

      2  创建和配置UnityBootstrapper中的Container

             这个UnityBootstrapper类中提供了一个CreateContainer的方法,这个方法创建并且返回一个UnityContainer的实例,在大多数情况下,你不太需要去改变这些,这个CreateContainer()方法是一个虚方法,因此它是相当灵活的。

       当这个容器被创建以后,就需要来配置你的应用程序了,这个ConfigureContainer()默认的注册了一系列的Prism services,我们来看看这个方法的默认实现。

    protected virtual void ConfigureContainer()
    {
    ...
      if (useDefaultConfiguration)
      {
        RegisterTypeIfMissing(typeof(IServiceLocator), typeof(UnityServiceLocatorAdapter), true);
        RegisterTypeIfMissing(typeof(IModuleInitializer), typeof(ModuleInitializer), true);
        RegisterTypeIfMissing(typeof(IModuleManager), typeof(ModuleManager), true);
        RegisterTypeIfMissing(typeof(RegionAdapterMappings), typeof(RegionAdapterMappings), true);
        RegisterTypeIfMissing(typeof(IRegionManager), typeof(RegionManager), true);
        RegisterTypeIfMissing(typeof(IEventAggregator), typeof(EventAggregator), true);
        RegisterTypeIfMissing(typeof(IRegionViewRegistry), typeof(RegionViewRegistry), true);
        RegisterTypeIfMissing(typeof(IRegionBehaviorFactory), typeof(RegionBehaviorFactory), true);
      }
    }
    

      这个Bootstrapper的RegisterTypeIfMissing方法来决定一个服务是否已经注册过,并且不会连续去注册,通过重载这个方法,你也可以关闭已经注册的服务,并且注册自己的服务,以下面的代码为例,解释如何来注册自己的服务。  

    protected override void ConfigureContainer()
    {
        base.ConfigureContainer();
        this.RegisterTypeIfMissing(typeof(IModuleTracker), typeof(ModuleTracker),true);
        this.Container.RegisterInstance<CallbackLogger>(this.callbackLogger);
    }
    

      下面我们就通过代码来分析ModuleTracker和IModuleTracker。

          这个类和接口是我们自己定义的用于管理我们自己的类,首先来介绍IModuleTracker。  

    public interface IModuleTracker
        {
            void RecordModuleConstructed(string moduleName);
            void RecordModuleDownloading(string moduleName, long bytesReceived, long totalBytesToReceive);
            void RecordModuleInitialized(string moduleName);
            void RecordModuleLoaded(string moduleName);
        }
    

      根据命名的含义,我们不难看出具体的每一个方法的含义,RecordModuleConstructed(string moduleName)用于记录当前的Module是通过构造函数来构造的,RecordModuleDownloading(string moduleName, long bytesReceived, long totalBytesToReceive)记录当前的Module是通过网络来下载的,RecordModuleInitialized (string moduleName)表示用来记录当前的Moudule已经经历过初始化阶段,另外RecordModuleLoaded(string moduleName)用来记录当前的Module已经加载完毕。ModuleTracker是继承自IModuleTracker的具体实现,这里代码太多就不一一说明,仅仅是一个提纲挈领的方式来讲述基本的概念和原理。

      

  • 相关阅读:
    EntityFramework之领域驱动设计实践
    Entity Framework 学习初级篇1EF基本概况(入门)
    整理一下Entity Framework的查询
    Unity(六):使用场景Ⅲ:用于依赖注入(上)
    比较NHibernate和Entity Framework
    contentclass对应的一些值
    IE8访问架设在Windows Server 2008(R2)的SharePoint Server 2007是验证框问题
    创建一个图文并茂的调查
    SharePoint回环检查(Loopback Check)相关问题
    Something you need to know about Content Deployment in SharePoint
  • 原文地址:https://www.cnblogs.com/seekdream/p/5859656.html
Copyright © 2011-2022 走看看