AutoFac文檔
目錄
- 開始
- Registering components
- 控制作用域和生命周期
- 用模塊結構化Autofac
- xml配置
- 與.net集成
- 深入理解Autofac
- 指導
- 關於
- 詞匯表
實例生命周期
實例生命周期決定的在同一個服務的每個請求中實例是如何共享的。
當請求一個服務的時候,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;