2.1版本也帶來許多新特性:
1. 組件發現:Autofac 2可以從一個程序集的註冊類型設置根據用戶指定的規則:var dataAccess = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(dataAccess)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
RegisterAssemblyTypes方法將Repository模式的數據訪問接口類都註冊了,語法非常的簡單。
2.類型關係:Autofac通過自動支持小型,有重點,強類型的包裝,來表達動態的依賴關係。類型關係如下:
Relationship | Adapter Type | Meaning |
---|---|---|
A needs a B | None | Dependency |
A needs a B at some point in the future | Lazy<B> |
Delayed instantiation |
A needs a B until some point in the future | Owned<B> |
Controlled lifetime |
A needs to create instances of B | Func<B> |
Dynamic instantiation |
A provides parameters of types X and Y to B | Func<X,Y,B> |
Parameterisation |
A needs all the kinds of B | IEnumerable<B> |
Enumeration |
A needs to know X about B before using it | Meta<T> and
Meta<B,X> |
Metadata interrogation |
3. 具體參看文章The Relationship Zoo.
組件元數據:.NET 4版本的Autofac 2.1支持類似於Managed Extensibility Framework (MEF)的功能。.NET 3.5(以及4.0)版本的提供了一個弱類型的Meta<T>類
集成Managed Extensibility Framework (MEF),具體內容參看Autofac MEF integration wiki page,有一篇博客Hosting MEF Extensions in an IoC Container對這個架構進行了深入的討論。
2.1版本不僅帶來了許多新特性,而且對1.4版本也作了很大的改進:
泛型現在是一等公民– Autofac 使用合適的泛型類型來解決通用的服務
激活事件的參數實例是強類型的,例如 builder.RegisterType<Foo>().OnActivating(e => e.Instance.Start()).
ASP.NET MVC的Controller註冊更靈活和更簡單,通過方法RegisterControllers() 進行註冊,參看文章MVC Integration Changes in Autofac Beta 2.1.6.
默認的Scope更改爲單件(Singleton)而不是factory
支持“Resolve Anything”
API 文檔可以通過google進行搜索,例如http://www.google.com.au/search?q=site:api.autofac.org+ILifetimeScope。