首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Prism 服務模式實作:Service Locator、DI 容器與基礎服務註冊

     編輯:關於.NET

服務定位器模式

當類別依賴服務時,直接引用會造成耦合、生命週期管理分散、編譯期需具體實現。Service Locator 集中創建與管理服務,優點:

  • 隔離具體實現,替換容易
  • 支援運行時動態載入服務
  • 統一管理生命週期(單例/暫態)
  • 利於單元測試

.NET 內建 System.ComponentModel.Design.ServiceContainer 即為簡易實現,內部用 Hashtable 映射型別與實例。

Prism:容器即定位器

Prism 無專屬 Service Locator,直接以 DI 容器(IUnityContainer)作為服務定位器。RegisterType 對應 AddService,Resolve 對應 GetService。

Prism 基礎服務

預設載入下列服務(除非 Run(false)):

  • IModuleEnumerator:模組枚舉器(必須自行提供具體實現)
  • IContainerFacade:容器外觀
  • IEventAggregator:事件聚合器
  • RegionAdapterMappings:Region 適配器映射
  • IRegionManager:Region 管理器
  • IModuleLoader:模組載入器

三種模組枚舉器:StaticModuleEnumerator、DirectoryLookupModuleEnumerator、ConfigurationModuleEnumerator。

服務註冊與使用

基礎共享服務:於 Bootstrapper.ConfigureContainer 註冊。
模組專屬服務:於模組 Initialize 中註冊,隨模組載入才註冊,達到延遲載入效果。

// Bootstrapper
protected override void ConfigureContainer() {
    Container.RegisterType<IMyService, MyService>();
    base.ConfigureContainer();
}

// Module
public class MyModule : IModule {
    private readonly IUnityContainer _container;
    public MyModule(IUnityContainer container) { _container = container; }
    public void Initialize() { _container.RegisterType<IMyService, MyService>(); }
}

註:Prism 內部使用 IContainerFacade 抽象容器,但應用層建議直接用 IUnityContainer 以獲得完整功能(註冊、解析等),除非需支援多容器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved