autofac文檔:實例生命周期


AutoFac文檔

目錄

  1. 開始
  2. Registering components
  3. 控制作用域和生命周期
  4. 用模塊結構化Autofac
  5. xml配置
  6. 與.net集成
  7. 深入理解Autofac
  8. 指導
  9. 關於
  10. 詞匯表

實例生命周期

實例生命周期決定的在同一個服務的每個請求中實例是如何共享的。

當請求一個服務的時候,Autofac會返回一個單例 (single instance作用域), 一個新的對象 (per lifetime作用域) 或者在某種上下文環境中的單例。比如 一個線程 或者一個HTTP請求 (per lifetime 作用域)。

這條規則適用於顯示調用Resolve從容器中檢索對象或者容器中為了滿足依賴而隱式實現的對象。

更深入的探討請參考an Autofac Lifetime Primer.

Per Dependency

在其他容器中也稱作瞬態或者工廠,使用Per Dependency作用域,服務對於每次請求都會返回單獨的實例。

在沒有指定其他參數的情況下,這是默認是作用域。

 builder.RegisterType<X>();

// or

builder.RegisterType<X>().InstancePerDependency();
 

Single Instance

使用Single Instance作用域,所有對父容器或者嵌套容器的請求都會返回同一個實例。

 builder.RegisterType<X>().SingleInstance();
 

Per Lifetime Scope

這個作用域適用於嵌套的生命周期。一個使用Per Lifetime 作用域的component在一個 nested lifetime scope內最多有一個實例。

當對象特定於一個工作單元時,這個非常有用。比如,一個HTTP請求,每一個工作單元都會創建一個nested lifetime,如果在每一次HTTP請求中創建一個nested lifetime,那么其他使用 per-lifetime 的component在每次HTTP請求中只會擁有一個實例。

這種配置模型在其他容器中等價於per-HTTP-request, per-thread等。

 builder.RegisterType<X>().InstancePerLifetimeScope();
 

的ASP.NET和WCF集成中,每一次web請求或者方法調用,InstancePerLifetimeScope會被默認附加到component上

上下文的

上下文作用域和per-lifetime作用域類似,但是對可見性提供更多顯示的控制。

在大多數程序中,同一層次的容器嵌套代表一個工作單元,如果需要多層嵌套(例如global->request->transation),可以使用標簽確保component在多層結構中的某一層共享。

 builder.RegisterType<X>().InstancePerMatchingLifetimeScope(MyContextHierarchy.UserSession);
 

提供的標簽和生命周期作用域是對應的。

 var userSessionLifetime = container.BeginLifetimeScope();
userSessionLifetime.Tag = MyContextHierarchy.UserSession;
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM