Dot-Net

IoC - Unity,RegisterInstance 是如何工作的,對嗎?

  • May 21, 2015

我正在實施 Ioc,我想確保幾件事是正確的。

  1. 如果我使用RegisterInstance, 解析它總是會返回單例對象?
  2. BootStrapper 將被載入到Global.asax或最初載入它的某個地方,這意味著所有實例都是單例的?

但我想知道如何

  1. 為每個解析創建一個單獨的實例,PerResolve 不適用於 RegisterInstance,它僅適用於 RegisterType。

2.如果我將依賴對像作為靜態屬性,它會以同樣的方式工作,如果我能夠為每個解析創建單獨的實例?

請幫忙?

public class ClientUser : UserServiceBase, IClientUser
{
   private  IDataServiceManager _dataServiceManager;
   public ClientUser()
   {

   }

   private IDataServiceManager DataServiceMgr
   {
       get
       {
           if (_dataServiceManager == null)
               _dataServiceManager = ProjectContainer.Instance.Resolve<IDataServiceManager>();

           return _dataServiceManager;
       }
   }    

RegisterInstance如果您想要 PerResolve 實例化,則不能使用。要麼使用RegisterInstance將始終返回相同的對象實例(即註冊實例的點),要麼使用RegisterType和定義PerResolveLifetimeManager

RegisterInstance預設使用ContainerControlledLifetimeManager. 唯一其他有意義的終身管理器RegisterInstanceExternallyControlledLifetimeManager.

TransientLifetimeManager並且PerResolveLifetimeManager沒有意義,因為這些生命週期必須在每次呼叫時創建新實例Resolve

PerThreadLifetimeManager在您不控制 threading 的情況下是無用的。

引用自:https://stackoverflow.com/questions/5394441