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

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

預設 RegisterType 每次 Resolve 產生新實例;指定 ContainerControlledLifetimeManager 後,首次建立,後續皆回傳同一實例。
進階:同一介面多單例 —— 以「型別+名稱」複合鍵區分:

同理支援基類+名稱、直接類別+名稱等組合。
若已建立物件,欲以該實例為單例,用 RegisterInstance:
var order = new CommonOrder { Discount = 0.9 };
container.RegisterInstance<IOrder>(order);

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