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

Unity 實作單例模式:容器管理生命週期,類別保持純粹

     編輯:關於.NET

為何交給容器管理單例

傳統寫法在類別內實作 GetInstance() 判斷 null 建立實例,將生命週期管理與業務邏輯耦合,違反 SRP(單一職責原則)。Unity 容器接管生命週期,類別保持乾淨。

準備介面與類別

IOrder 介面 CommonOrder 類別 VipOrder 類別

兩大使用場景

1. 註冊型別為單例

使用 ContainerControlledLifetimeManager:

container.RegisterType<IOrder, CommonOrder>(new ContainerControlledLifetimeManager());

註冊介面單例程式碼 單例驗證輸出

預設 RegisterType 每次 Resolve 產生新實例;指定 ContainerControlledLifetimeManager 後,首次建立,後續皆回傳同一實例。

進階:同一介面多單例 —— 以「型別+名稱」複合鍵區分:

命名單例註冊

同理支援基類+名稱、直接類別+名稱等組合。

2. 註冊現有實例為單例

若已建立物件,欲以該實例為單例,用 RegisterInstance:

var order = new CommonOrder { Discount = 0.9 };
container.RegisterInstance<IOrder>(order);

註冊現有實例程式碼 現有實例單例驗證

同樣支援命名、基類等變體。

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