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的具體實現,這里代碼太多就不一一說明,僅僅是一個提綱挈領的方式來講述基本的概念和原理。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM