原文鏈接:http://docs.autofac.org/en/latest/getting-started/index.html在程式中使用Autofac的基本模式是:用控制反轉(IoC)的思想組織程式。添加對 Autofac 的引用。程式啟動階段創建 ContainerBuilder。註冊組件。...
原文鏈接:http://docs.autofac.org/en/latest/getting-started/index.html
在程式中使用Autofac的基本模式是:
- 用控制反轉(IoC)的思想組織程式。
- 添加對 Autofac 的引用。
- 程式啟動階段
- 創建 ContainerBuilder。
- 註冊組件。
- 生成容器。
- 程式執行階段
- 從容器創建生命周期範圍對象(ILifetimeScope介面)。
- 使用生命周期範圍對象解析組件實例。
本文通過一個簡單的控制台程式演示這些步驟。
組織程式
控制反轉的基本思路是,不讓類創建它的依賴項,而是將依賴項通過構造函數傳遞給它。請參閱 Martin Fowler 這篇解釋依賴註入/控制反轉的文章。
在本示例中,我們定義一個輸出“今天”的日期的類。但是,我們不想讓它和 Console 類捆綁在一起。這有兩個原因:1,方便測試,2,在沒有Console的環境中也能使用。
我們還對輸出日期的方式進行抽象,這樣就可以隨時切換到另一個版本,比如輸出“明天”的日期。
代碼:
using System; namespace DemoApp { // 此介面將“輸出”概念從Console類解耦。 // 我們只管“輸出”,而不關心操作是怎麼進行的。 public interface IOutput { void Write(string content); } // 這裡的實現方式是向Console輸出內容。 // 也可以用其他方式,比如輸出到 Debug 和 Trace。 public class ConsoleOutput : IOutput { public void Write(string content) { Console.WriteLine(content); } } // 這個介面將“輸出日期”的概念從具體的輸出方法中解耦。 public interface IDateWriter { void WriteDate(); } // TodayWriter 是這些元素匯合在一起的地方。 // 它的構造函數有一個 IOutput 參數,通過提供不同的實現類, // TodayWriter可以將日期寫到不同的地方。 // 進一步的,在這裡WriteDate的實現方式是輸出“今天的日期”, // 我們可以用另一個類輸出其他格式,或者其他日期。 public class TodayWriter : IDateWriter { private IOutput _output; public TodayWriter(IOutput output) { this._output = output; } public void WriteDate() { this._output.Write(DateTime.Today.ToShortDateString()); } } }
現在我們有了組織良好的依賴關係,接下來引入 Autofac。
添加對 Autofac 的引用
首先向項目添加對Autofac的引用。這個示例中,我們只使用 Autofac 的核心部分。其他類型的應用程式可能需要Autofac 集成庫。
最簡單的方式是使用 NuGet。“Autofac” 程式包包含所有核心功能。