2011-03-22 60 views
7

我正在實施Ioc,並且我想確保有一些事情是正確的。IoC - Unity,RegisterInstance如何工作,對嗎?

  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; 
     } 
    }  

回答

12

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

RegisterInstance默認使用ContainerControlledLifetimeManagerRegisterInstance唯一其他有意義的終生管理者是ExternallyControlledLifetimeManager

TransientLifetimeManagerPerResolveLifetimeManager沒有意義,因爲每次您撥打Resolve時,這些生命週期都必須創建新實例。

PerThreadLifetimeManager在您不控制線程的場景中沒有用處。

+0

謝謝,只是想知道更多的事情,wats最好的地方稱爲bootstrapper註冊? – Waqas 2011-03-22 17:57:33

+0

您可以將引導程序例如放在Global.asax中的Application_Start中。 – 2011-03-22 20:18:38